diff --git a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat index d99c42a..ba855b2 100644 --- a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat +++ b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPgogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSLliIblsYIiIEljb249Ik5tR2VvbWV0cnkiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0i5YKo5bGC54m55oCnIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IuWxnuaAp+aPkuWAvCIgSWNvbj0iTm1JbnRlcnBvbGF0aW9uIiAvPgogICAgICAgPC9Hcm91cD4KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg== \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdlb21ldHJ5IiBBbGlhcz0i5YiG5bGCIiBJY29uPSJObUdlb21ldHJ5IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMyIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObVByb3BlcnRpZXMiIEFsaWFzPSLlgqjlsYLnibnmgKciIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSLlsZ7mgKfmj5LlgLwiIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/MenuDefines_Ribbon_en.dat b/Bin/Config/Common/MenuDefines_Ribbon_en.dat index 154151c..d5725ff 100644 --- a/Bin/Config/Common/MenuDefines_Ribbon_en.dat +++ b/Bin/Config/Common/MenuDefines_Ribbon_en.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HZW9tZXRyeSIgQWxpYXM9IkxheWVyIERpdmlzaW9uIiBJY29uPSJObUdlb21ldHJ5IiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTEzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJvcGVydGllcyIgQWxpYXM9IlJlc2Vydm9pciBQcm9wZXJ0aWVzIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IlByb3BlcnR5IEludGVycG9sYXRpb24iIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4KICAgICAgIDwvR3JvdXA+Cg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSJMYXllciBEaXZpc2lvbiIgSWNvbj0iTm1HZW9tZXRyeSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0iUmVzZXJ2b2lyIFByb3BlcnRpZXMiIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSJQcm9wZXJ0eSBJbnRlcnBvbGF0aW9uIiBJY29uPSJObUludGVycG9sYXRpb24iIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_cn.dat b/Bin/Config/Common/ModelParaDefinesNM_cn.dat index 4ad2fde..c7e0160 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_cn.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_cn.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9IkRhcmN5IiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSLlrZTpmpnluqYiICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEiICAgICAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkN0aSIgQWxpYXM9Iue7vOWQiOWOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiICAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkNmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0i5Yid5aeL5ZCr5rK56aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLkupXlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJY5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZ5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSLkupXnrZLljYrlvoQiICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0ic2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwIiAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuaWreWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gwIiBBbGlhcz0i6LW354K5WDAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMCIgQWxpYXM9Iui1t+eCuVkwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDEiIEFsaWFzPSLnu4jngrlYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9Iue7iOeCuVkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibWQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSLlgqjlsYLljprluqYiICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9waGkiIEFsaWFzPSLlrZTpmpnluqYiICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxIiAgICAgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgdG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2YiICBBbGlhcz0i5bKp55+z5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU29pIiBBbGlhcz0i5Yid5aeL5ZCr5rK56aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JvIiAgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVvIiBBbGlhcz0i5rK555u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ28iICAgQWxpYXM9IuayueWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSLmsLTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N3IiAgIEFsaWFzPSLmsLTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHdhdGVyIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JnIiAgIEFsaWFzPSLmsJTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0i5rCU55u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IuawlOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgZ2FzIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCjwvUm9vdD4NCg== \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQnciICBBbGlhcz0i5rC05L2T56ev57O75pWwIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwIiAgICAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLkupXlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJY5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZ5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSLkupXnrZLljYrlvoQiICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0ic2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwIiAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0RXIiBBbGlhcz0i6KOC57yd5a695bqm5Y+C5pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHdpZHRoIHBhcmFtZXRlciIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmlq3lsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9Iui1t+eCuVgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSLotbfngrlZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0i57uI54K5WDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSLnu4jngrlZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9MZWFrYWdlIiBBbGlhcz0i5rOE5ryP57O75pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICAgTWF4PSIxMDAwMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfaCIgICBBbGlhcz0i5YKo5bGC5Y6a5bqmIiAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IuWIneWni+WQq+awlOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBnYXMgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1N3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSLmsrnljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IG9pbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CdyIgICBBbGlhcz0i5rC05L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0i5rC05Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0i5rCU5L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1ZyIgQWxpYXM9IuawlOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NnIiAgIEFsaWFzPSLmsJTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_en.dat b/Bin/Config/Common/ModelParaDefinesNM_en.dat index cac7ac4..29f5b0a 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_en.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_en.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9InBoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEiICAgICAgTWluPSIxZS0wNSIgIERpZ2l0PSI0IiAgRGVzYz0icG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkN0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjgiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgb2lsIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlN3aSIgQWxpYXM9IkluaXRpYWwgV2F0ZXIgU2F0dXJhdGlvbiIgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IldlbGwgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfWCIgICAgQWxpYXM9IlggQ29vcmRpbmF0ZSIgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAwIiAgTWluPSItMTAwMDAiIERpZ2l0PSI2IiAgRGVzYz0id2VsbCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfWSIgICAgQWxpYXM9IlkgQ29vcmRpbmF0ZSIgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAwIiAgTWluPSItMTAwMDAiIERpZ2l0PSI2IiAgRGVzYz0id2VsbCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfUnciICAgQWxpYXM9IldlbGxib3JlIFJhZGl1cyIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSJTa2luIEZhY3RvciIgICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSJXZWxsYm9yZSBTdG9yYWdlIENvZWZmIiAgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9Ikhvcml6b250YWwgV2VsbCBMZW5ndGgiIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IkRyYWluIEFuZ2xlIiAgICAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0iTnVtYmVyIG9mIEZyYWN0dXJlcyIgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0iRnJhY3R1cmUgSGFsZi1MZW5ndGgiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9IkZyYWN0dXJlIEFuZ2xlIiAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkluZGVwZW5kZW50IEZyYWN0dXJlIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gwIiBBbGlhcz0iU3RhcnQgWDAiICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSJFbmQgWDEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMSIgQWxpYXM9IkVuZCBZMSIgICAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiBVbml0PSJtZC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJGYXVsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDAiIEFsaWFzPSJTdGFydCBYMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kwIiBBbGlhcz0iU3RhcnQgWTAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMSIgQWxpYXM9IkVuZCBYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9IkVuZCBZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IkxlZnQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWluIiBBbGlhcz0iQm90dG9tIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IlJpZ2h0IEJvdW5kYXJ5IFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IlRvcCBCb3VuZGFyeSBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0iQ2VudGVyIFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJZIiBBbGlhcz0iQ2VudGVyIFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19SYWRpdXMiICBBbGlhcz0iUmFkaXVzIiAgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJQb2x5Z29uIEJvdW5kYXJ5IFZlcnRleCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWCIgQWxpYXM9IlggQ29vcmRpbmF0ZSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWSBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InJlZ2lvbiBsZWFrYWdlIGNvZWZmaWNpZW50IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlZ2lvbiBNYXJrIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0iU3RvcmFnZSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJzdG9yYWdlIHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21LciIgICAgICBBbGlhcz0iTW9iaWxpdHkgUmF0aW8iIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSJOZXQtdG8tR3Jvc3MiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIFJlc3VsdCBwYXJhbWV0ZXJzIGFyZSBzZWxlY3RlZCBvbmx5IGJ5IHJlYnVpbGRSZXN1bHRQYXJhcygpLiAtLT4NCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZXN1bHQgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1J3IiAgIEFsaWFzPSJXZWxsIFJhZGl1cyIgICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMTAiICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSByYWRpdXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0RmYyIgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiAgIERlZmF1bHQ9IjEwMDAiICAgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfU2tpbiIgQWxpYXM9IlNraW4gRmFjdG9yIiAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgc2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0MiICAgIEFsaWFzPSJXZWxsYm9yZSBTdG9yYWdlIENvZWZmIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSJJbml0aWFsIEZvcm1hdGlvbiBQcmVzc3VyZSIgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSJQZXJtZWFiaWxpdHkiICAgICAgICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCdyIgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0iIiAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJNaXV3IiBBbGlhcz0iV2F0ZXIgVmlzY29zaXR5IiAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ3RpIiBBbGlhcz0iVG90YWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiICAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkNmIiAgQWxpYXM9IlJvY2sgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IkluaXRpYWwgT2lsIFNhdHVyYXRpb24iICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0iSW5pdGlhbCBHYXMgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Ik51bWJlciBvZiBGcmFjdHVyZXMiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9IkZyYWN0dXJlIEhhbGYtTGVuZ3RoIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSJGcmFjdHVyZSBBbmdsZSIgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgRGVmYXVsdD0iMTAwMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJJbmRlcGVuZGVudCBGcmFjdHVyZSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9IlN0YXJ0IFgwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTAiIEFsaWFzPSJTdGFydCBZMCIgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0iRW5kIFgxIiAgICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSJFbmQgWTEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9GQyIgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgVW5pdD0ibUQubSIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRFciIEFsaWFzPSJGcmFjdHVyZSBXaWR0aCBQYXJhbWV0ZXIiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGggcGFyYW1ldGVyIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkZhdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9IlN0YXJ0IFgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSJTdGFydCBZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0iRW5kIFgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0iRW5kIFkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVjdGFuZ2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWluIiBBbGlhcz0iTGVmdCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSJCb3R0b20gQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWF4IiBBbGlhcz0iUmlnaHQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWF4IiBBbGlhcz0iVG9wIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJDaXJjbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclgiIEFsaWFzPSJDZW50ZXIgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSJDZW50ZXIgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSJSYWRpdXMiICAgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgcmFkaXVzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlBvbHlnb24gQm91bmRhcnkgVmVydGV4IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWCBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1kiIEFsaWFzPSJZIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIE1hcmsgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbVciICAgICAgIEFsaWFzPSJTdG9yYWdlIFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSJNb2JpbGl0eSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSI2IiBEZXNjPSJtb2JpbGl0eSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fTmV0VG9Hcm9zcyIgQWxpYXM9Ik5ldC10by1Hcm9zcyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJuZXQtdG8tZ3Jvc3MiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDwhLS0gUmVzdWx0IHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkIG9ubHkgYnkgcmVidWlsZFJlc3VsdFBhcmFzKCkuIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlc3VsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IldlbGwgUmFkaXVzIiAgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IldlbGxib3JlIFN0b3JhZ2UgQ29lZmYiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMjUiICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/UnitDefault_cn.dat b/Bin/Config/Common/UnitDefault_cn.dat index 6271b6b..49e38fe 100644 --- a/Bin/Config/Common/UnitDefault_cn.dat +++ b/Bin/Config/Common/UnitDefault_cn.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEYXJjeSIgaz0iMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYmFzZSB1bml0Ii8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzPnu4TvvJrkupXnrZLlgqjpm4bns7vmlbAgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzMiIE5hbWU9IlRvRG8zIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzMwMSIgVW5pdD0ibV4zL01QYSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDku6XkuIvkuLrmlbDlgLzor5XkupXmqKHlnZfooaXlhYXmianlsZXljZXkvY0gPT09PT09PT09PT09PT09PT09PT0gLS0+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzM+e7hO+8muS6leetkuWCqOmbhuezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMyIgTmFtZT0iVG9EbzMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMzAxIiBVbml0PSJtXjMvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzNOe7hO+8mua1geWKqOiDveWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmbG93X2NhcGFjaXR5IiBOYW1lPSJmbG93X2NhcGFjaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzQwMSIgVW5pdD0ibUQubSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index efd37e2..b86f8f7 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -1,4 +1,4 @@ - + @@ -6480,4 +6480,75 @@ Average pressure in contour: %2 MPa Kriging 结果中包含无效数值。 + + nmReservoirParameterField + The parameter layout is unavailable.参数布局不可用。 + Parameter definition not found: %1未找到参数定义:%1 + Failed to bind the unit for parameter: %1参数单位绑定失败:%1 + Dimensionless无量纲 + + + nmReservoirParameterPage + Object display对象显示 + Display:显示: + No editable objects in this category.此分类中没有可编辑对象。 + Initial oil and water saturations must sum to 1.初始含油饱和度与初始含水饱和度之和必须为 1。 + + + nmWxReservoirPropertiesEditor + Reservoir properties settings储层特性设置 + Reservoir properties储层参数 + Help帮助 + OK确定 + Cancel取消 + Basic基础 + Wells + Geometry objects几何对象 + Reservoir parameters储层参数 + Well parameters井参数 + Faults断层 + Fractures裂缝 + Composite regions复合区 + Region marks区域标记 + Please correct the invalid parameter values.请修正无效的参数值。 + Reservoir type储层类型 + Homogeneous均质储层 + Dual porosity pseudo steady state双重介质拟稳态 + Fault flow model断层流动模型 + Boundary type边界类型 + Leaky泄漏 + Composite limit复合边界 + Permeable boundary可渗透边界 + Composite boundary复合边界 + Fracture flow model裂缝流动模型 + Finite conductivity有限导流 + Infinite conductivity无限导流 + Vertical well直井 + Fractured vertical well压裂直井 + Multistage fractured horizontal well多段压裂水平井 + Position and wellbore位置与井筒 + Wellbore storage井筒储集 + Wellbore storage and fracture井筒储集与裂缝 + Basic and medium properties基础与介质特性 + Fluid parameters流体参数 + Oil phase parameters油相参数 + Water phase parameters水相参数 + Compressibility压缩系数 + Compressibility and saturation压缩系数与饱和度 + Reservoir medium parameters储层介质参数 + Geometry几何位置 + Flow properties流动属性 + Conductivity properties导流属性 + Boundary properties边界属性 + + + nmSubWndMain + Reservoir properties储层参数 + The current numerical well-test data is unavailable.当前数值试井数据不可用。 + + + QObject + The current numerical well-test data is unavailable.当前数值试井数据不可用。 + The reservoir properties editing session is unavailable.储层参数编辑会话不可用。 + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml index f26f2ef..54efcc8 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml @@ -17,11 +17,16 @@ - + + + + + + @@ -32,11 +37,11 @@ - + - - + + @@ -44,7 +49,8 @@ - + + @@ -52,6 +58,7 @@ + @@ -85,12 +92,12 @@ - + - + @@ -99,7 +106,7 @@ - + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml index ad27365..23f0745 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml @@ -18,11 +18,16 @@ - + + + + + + @@ -33,11 +38,11 @@ - + - - + + @@ -45,7 +50,8 @@ - + + @@ -53,6 +59,7 @@ + @@ -86,12 +93,12 @@ - + - + @@ -100,7 +107,7 @@ - + diff --git a/Bin/XmlFiles/UnitDefault_cn.xml b/Bin/XmlFiles/UnitDefault_cn.xml index 28882e7..fa19649 100644 --- a/Bin/XmlFiles/UnitDefault_cn.xml +++ b/Bin/XmlFiles/UnitDefault_cn.xml @@ -331,10 +331,18 @@ + + + + + + + + diff --git a/Include/nmNum/nmCalculation/nmCalculationUtils.h b/Include/nmNum/nmCalculation/nmCalculationUtils.h index 76a5faa..3688f57 100644 --- a/Include/nmNum/nmCalculation/nmCalculationUtils.h +++ b/Include/nmNum/nmCalculation/nmCalculationUtils.h @@ -19,6 +19,13 @@ class NMCALCULATION_EXPORT nmCalculationUtils { static bool writeFile(const QStringList& content, const QString &filePath); static QStringList readFile(const QString & filePath); + /** + * @brief 将数据层使用的毫达西转换为PEBI求解器使用的达西。 + * @param dPermeabilityMilliDarcy 渗透率,单位为mD。 + * @return 渗透率,单位为D。 + */ + static double milliDarcyToDarcy(double dPermeabilityMilliDarcy); + // 调用求解器Kriging接口,对targetPoints中的坐标依次进行属性插值. // measurementPoints与measurementValues按下标一一对应. // 成功时outputValues与targetPoints数量相同且顺序一致;失败时清空outputValues. diff --git a/Include/nmNum/nmData/nmDataAttribute.h b/Include/nmNum/nmData/nmDataAttribute.h index b4eb34a..8afdd70 100644 --- a/Include/nmNum/nmData/nmDataAttribute.h +++ b/Include/nmNum/nmData/nmDataAttribute.h @@ -1,4 +1,4 @@ -#ifndef NMDATAATTRIBUTE_H +#ifndef NMDATAATTRIBUTE_H #define NMDATAATTRIBUTE_H #include @@ -15,7 +15,7 @@ enum UnitType { UNIT_TYPE_LENGTH, // 长度:m, cm, mm, in, ft, km等 UNIT_TYPE_CONDUCTIVITY, // 导流能力:md.m, md.ft, m^3 UNIT_TYPE_PRESSURE, // 压力:MPa, psia, Pa, kPa, bar等 - UNIT_TYPE_PERMEABILITY, // 渗透率:md, Darcy, m^2, cm^2等 + UNIT_TYPE_PERMEABILITY, // 渗透率:mD, D, m^2, cm^2等 UNIT_TYPE_ANGLE, // 角度:o (degree), radian UNIT_TYPE_FLOW_RATE_RECIPROCAL, // 流量倒数:1/B/D, 1/m^3/D等 UNIT_TYPE_COMPRESSIBILITY, // 压缩系数:m^3/MPa, bbl/psi等 diff --git a/Include/nmNum/nmData/nmDataBinaryTools.h b/Include/nmNum/nmData/nmDataBinaryTools.h index d6abef6..9db16c6 100644 --- a/Include/nmNum/nmData/nmDataBinaryTools.h +++ b/Include/nmNum/nmData/nmDataBinaryTools.h @@ -1,4 +1,4 @@ -#ifndef NMDATABINARYTOOLS_H +#ifndef NMDATABINARYTOOLS_H #define NMDATABINARYTOOLS_H #include @@ -152,7 +152,7 @@ public: double dt_Max; // 最大时间间隔 // 注意:k, phi, h是每个网格单元一个值,数量太大不保存基准值 // Python采样时根据 Base.k_ref 给所有单元赋相同值 - double k_ref; // 渗透率参考值(用于采样) + double k_ref; // 渗透率参考值,写入场景文件前已转换为D double phi_ref; // 孔隙度参考值(用于采样) double h_ref; // 厚度参考值(用于采样) } Base; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h new file mode 100644 index 0000000..37b6783 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h @@ -0,0 +1,144 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmDefines.h" + +#include +#include + +class nmAttrRegistry; +struct nmReservoirPropertiesSnapshot; + +/** @brief 储层参数编辑页面分类。 */ +enum nmReservoirPropertiesCategory +{ + NM_RESERVOIR_PAGE_RESERVOIR = 0, ///< 储层。 + NM_RESERVOIR_PAGE_WELL, ///< 井。 + NM_RESERVOIR_PAGE_FAULT, ///< 断层。 + NM_RESERVOIR_PAGE_FRACTURE, ///< 裂缝。 + NM_RESERVOIR_PAGE_COMPOSITE_REGION, ///< 复合区。 + NM_RESERVOIR_PAGE_REGION_MARK, ///< 区域标记。 + NM_RESERVOIR_PAGE_COUNT ///< 分类数量。 +}; + +/** @brief 参数对象的具体类型。 */ +enum nmReservoirPropertiesObjectType +{ + NM_RESERVOIR_OBJECT_RESERVOIR = 0, ///< 储层对象。 + NM_RESERVOIR_OBJECT_VERTICAL_WELL, ///< 直井对象。 + NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL, ///< 垂直压裂井对象。 + NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL,///< 水平压裂井对象。 + NM_RESERVOIR_OBJECT_REGION_MARK, ///< 区域标记对象。 + NM_RESERVOIR_OBJECT_FAULT, ///< 断层对象。 + NM_RESERVOIR_OBJECT_FRACTURE, ///< 裂缝对象。 + NM_RESERVOIR_OBJECT_REGION ///< 复合区对象。 +}; + +/** @brief 参数字段的编辑器类型。 */ +enum nmReservoirParameterEditorType +{ + NM_RESERVOIR_EDITOR_NUMBER = 0, ///< 浮点数输入框。 + NM_RESERVOIR_EDITOR_INTEGER, ///< 整数输入框。 + NM_RESERVOIR_EDITOR_ENUM ///< 稳定code枚举下拉框。 +}; + +/** @brief 枚举下拉框选项。 */ +struct NM_SUB_WXS_EXPORT nmReservoirEnumOption +{ + QString m_sCode; ///< 不随语言变化的业务代码。 + QString m_sText; ///< 当前语言下的显示文本。 +}; + +/** + * @brief 单个参数字段的界面描述。 + * @note 稳定参数ID用于会话读写,基础参数ID用于读取XML单位和范围。 + */ +struct NM_SUB_WXS_EXPORT nmReservoirParameterFieldInfo +{ + QString m_sParameterId; ///< 编辑会话中的稳定参数ID。 + QString m_sBaseParameterId; ///< 中英文参数XML中的基础参数ID。 + QString m_sLabel; ///< 枚举字段的显示名称;数值字段留空时读取XML别名。 + nmReservoirParameterEditorType m_eEditorType; ///< 字段编辑器类型。 + bool m_bUnitEnabled; ///< 是否为该字段创建单位下拉框。 + QList m_listOptions; ///< 枚举字段的稳定选项。 +}; + +/** @brief 参数分组的界面描述。 */ +struct NM_SUB_WXS_EXPORT nmReservoirParameterGroupInfo +{ + QString m_sTitle; ///< 分组标题。 + int m_nRow; ///< 分组在页面网格中的行。 + int m_nColumn; ///< 分组在页面网格中的列。 + int m_nRowSpan; ///< 分组纵向跨越的行数。 + int m_nColumnSpan; ///< 分组横跨的列数。 + bool m_bValueRightAligned; ///< 数值输入是否右对齐。 + bool m_bFieldsCentered; ///< 分组内字段是否水平居中并随宽度伸展。 + QList m_listFields; ///< 分组内按显示顺序排列的字段。 +}; + +/** @brief 单个可编辑对象的完整界面描述。 */ +struct NM_SUB_WXS_EXPORT nmReservoirPropertyObjectInfo +{ + nmReservoirPropertiesCategory m_eCategory; ///< 对象所属页面分类。 + nmReservoirPropertiesObjectType m_eObjectType; ///< 对象具体类型。 + int m_nSourceIndex; ///< 对象在工作副本容器中的索引。 + QString m_sObjectCode; ///< 编辑会话内稳定的对象编码。 + QString m_sDisplayName; ///< 对象显示名称。 + QList m_listGroups; ///< 原型式分组和字段描述。 +}; + +/** + * @brief 储层参数规范目录。 + * @note 对象映射、稳定ID、页面分组和联动所需的基础ID全部在此集中维护。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterCatalog +{ +public: + /** + * @brief 将工作副本中的属性注册到独立注册表。 + * @param pRegistry 编辑会话独占的属性注册表。 + * @param oSnapshot 可写工作副本。 + */ + static void registerSnapshot(nmAttrRegistry* pRegistry, + nmReservoirPropertiesSnapshot& oSnapshot); + + /** + * @brief 构建指定分类的对象和原型式分组描述。 + * @param eCategory 页面分类。 + * @param oSnapshot 当前工作副本。 + * @return 按界面显示顺序排列的对象描述。 + */ + static QList createObjectInfos( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSnapshot& oSnapshot); + + /** + * @brief 将数据类中的存储文本转换为稳定枚举code。 + * @param sParameterId 枚举参数ID。 + * @param sStoredValue 数据类中的存储文本。 + * @return 稳定业务code。 + */ + static QString enumCodeFromStoredValue(const QString& sParameterId, + const QString& sStoredValue); + + /** + * @brief 将稳定枚举code转换为数据类的存储文本。 + * @param sParameterId 枚举参数ID。 + * @param sCode 稳定业务code。 + * @return 数据类使用的存储文本。 + */ + static QString storedValueFromEnumCode(const QString& sParameterId, + const QString& sCode); + + /** @brief 读取工作副本中的枚举code。 */ + static QString enumCode(const nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId); + + /** @brief 修改工作副本中的枚举code。 */ + static bool setEnumCode(nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId, + const QString& sCode); + +private: + nmReservoirParameterCatalog(); +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h new file mode 100644 index 0000000..4409a0e --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h @@ -0,0 +1,168 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include +#include + +class iParameter; +class iUnitGroup; +class QComboBox; +class QGridLayout; +class QLabel; +class QLineEdit; + +/** + * @brief 储层参数字段所需的最小单位服务接口。 + * @note 主对话框负责适配iDlgBase,字段不直接依赖对话框基类或全局对象。 + */ +class NM_SUB_WXS_EXPORT nmIReservoirParameterUnitService +{ +public: + /** @brief 析构单位服务接口。 */ + virtual ~nmIReservoirParameterUnitService() {} + + /** @brief 按NM参数定义绑定一个数值编辑器和单位下拉框。 */ + virtual bool bindUnitField(QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId) = 0; + + /** @brief 将基准单位数值写入指定编辑器。 */ + virtual void setUnitBaseValue(QLineEdit* pLineEdit, + double dBaseValue) = 0; + + /** @brief 读取指定编辑器的基准单位数值。 */ + virtual double unitBaseValue(QLineEdit* pLineEdit) const = 0; + + /** @brief 校验指定单位编辑器。 */ + virtual bool isUnitInputValid(QLineEdit* pLineEdit) = 0; + + /** @brief 返回指定编辑器当前显示单位。 */ + virtual QString currentUnit(QLineEdit* pLineEdit) const = 0; + + /** @brief 返回指定编辑器的单位组,不转移所有权。 */ + virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const = 0; +}; + +/** + * @brief 原型式参数行的轻量逻辑单元。 + * @note 本类不创建外框或子面板,只把标签、编辑器和单位控件直接加入分组网格。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterField : public QObject +{ +public: + /** + * @brief 构造参数字段。 + * @param oFieldInfo 稳定字段描述。 + * @param pUnitService 主对话框注入的单位服务,不转移所有权。 + * @param pParent 字段生命周期父对象。 + */ + nmReservoirParameterField( + const nmReservoirParameterFieldInfo& oFieldInfo, + nmIReservoirParameterUnitService* pUnitService, + QObject* pParent = nullptr); + + /** @brief 析构字段,不单独删除由分组控件拥有的界面控件。 */ + virtual ~nmReservoirParameterField(); + + /** + * @brief 将字段的三个直接控件加入分组网格。 + * @param pLayout 所属分组的网格布局。 + * @param nRow 字段所在行。 + * @param nColumnOffset 字段起始列偏移。 + * @param sError 初始化失败原因。 + * @return 参数元数据和单位绑定均成功时返回true。 + */ + bool initialize(QGridLayout* pLayout, + int nRow, + int nColumnOffset, + QString& sError); + + /** @brief 返回编辑会话使用的稳定参数ID。 */ + QString parameterId() const; + + /** @brief 返回XML参数定义使用的基础参数ID。 */ + QString baseParameterId() const; + + /** @brief 返回字段是否为稳定code枚举。 */ + bool isEnum() const; + + /** @brief 设置数值输入文字是否右对齐。 */ + void setValueRightAligned(bool bRightAligned); + + /** @brief 返回数值编辑列的统一最小宽度。 */ + static int editorMinimumWidth(); + + /** @brief 返回单位列的统一最小宽度。 */ + static int unitMinimumWidth(); + + /** @brief 返回输入框和下拉框的统一紧凑高度。 */ + static int editorHeight(); + + /** @brief 设置基准单位下的数值并刷新显示。 */ + void setBaseValue(const QVariant& oValue); + + /** + * @brief 获取基准单位下的当前数值。 + * @param bValid 输出当前输入是否有效。 + * @return 有效时返回基准值,否则返回无效QVariant。 + */ + QVariant baseValue(bool& bValid); + + /** @brief 设置枚举稳定code;不会触发业务联动。 */ + void setEnumCode(const QString& sCode); + + /** @brief 返回当前枚举稳定code。 */ + QString enumCode() const; + + /** @brief 设置页面级关联校验错误;空文字表示清除关联错误。 */ + void setExternalValidationError(const QString& sError); + + /** @brief 校验当前输入,并更新参数范围提示。 */ + bool validate(); + + /** @brief 同时显示或隐藏该参数行的三个直接控件。 */ + void setFieldVisible(bool bVisible); + + /** @brief 返回参数行当前是否参与编辑和校验。 */ + bool isFieldVisible() const; + + /** @brief 返回数值输入框,供页面集中连接变化信号。 */ + QLineEdit* valueEditor() const; + + /** @brief 返回枚举下拉框,供页面集中连接变化信号。 */ + QComboBox* enumEditor() const; + +private: + /** @brief 创建数值输入框及单位控件。 */ + bool createNumericEditor(QGridLayout* pLayout, + int nRow, + int nColumnOffset, + QString& sError); + + /** @brief 创建稳定code枚举下拉框。 */ + void createEnumEditor(QGridLayout* pLayout, + int nRow, + int nColumnOffset); + + /** @brief 按XML精度格式化无单位或整数参数。 */ + QString formatBaseValue(double dValue) const; + + /** @brief 更新输入框的有效状态和帮助文字。 */ + void updateValidationAppearance(bool bValid); + + nmReservoirParameterFieldInfo m_oFieldInfo; ///< 稳定字段描述。 + nmIReservoirParameterUnitService* m_pUnitService; ///< 注入的单位服务,不拥有所有权。 + iParameter* m_pParameter; ///< 共享XML参数定义,不拥有所有权。 + QLabel* m_pLabel; ///< 参数名称标签。 + QLineEdit* m_pLineEdit; ///< 数值输入框。 + QComboBox* m_pValueComboBox; ///< 枚举值下拉框。 + QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。 + QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。 + QColor m_clrNormalText; ///< 输入框默认文字颜色。 + QString m_sExternalValidationError; ///< 页面级关联校验错误文字。 + bool m_bVisible; ///< 参数行是否参与编辑。 + bool m_bUpdating; ///< 程序写值时阻止业务信号。 +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h new file mode 100644 index 0000000..db3cc1e --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h @@ -0,0 +1,123 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include +#include + +class nmIReservoirParameterUnitService; +class nmReservoirParameterField; +class nmReservoirPropertiesSession; +class QComboBox; +class QGridLayout; +class QGroupBox; +class QLabel; +class QVBoxLayout; + +/** + * @brief 储层参数分类的原型式共享页面。 + * @note 页面是普通QWidget,只负责一层内容布局,不拥有单位系统或真实数据。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterPage : public QWidget +{ + Q_OBJECT + +public: + /** + * @brief 构造共享参数页面。 + * @param eCategory 页面分类。 + * @param pSession 编辑会话,不转移所有权。 + * @param pUnitService 主对话框单位服务,不转移所有权。 + * @param pParent 父窗口。 + */ + nmReservoirParameterPage(nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSession* pSession, + nmIReservoirParameterUnitService* pUnitService, + QWidget* pParent = nullptr); + + /** @brief 析构参数页面。 */ + virtual ~nmReservoirParameterPage(); + + /** + * @brief 重新读取当前分类对象并显示第一个对象。 + * @param sError 输出字段构建错误。 + * @return 页面构建成功返回true。 + */ + bool reloadObjects(QString& sError); + + /** + * @brief 校验并将当前可见数值写入会话工作副本。 + * @return 输入全部有效且写入成功时返回true。 + */ + bool commitPendingEdits(); + + /** @brief 返回当前页面的可见输入是否全部有效。 */ + bool isInputValid(); + + /** @brief 返回当前分类是否存在可编辑对象。 */ + bool hasEditableObjects() const; + + /** @brief 返回页面分类。 */ + nmReservoirPropertiesCategory category() const; + +signals: + /** @brief 当前页有效状态发生变化。 */ + void sigValidityChanged(bool bValid); + +private slots: + /** @brief 切换当前编辑对象。 */ + void slotObjectChanged(int nIndex); + + /** @brief 数值输入变化后刷新整体有效状态。 */ + void slotFieldValueEdited(); + + /** @brief 枚举code变化后保存并执行集中联动。 */ + void slotEnumIndexChanged(int nIndex); + +private: + /** @brief 创建对象显示控制区和单层参数分组区域。 */ + void createUi(); + + /** @brief 构建指定对象的全部分组和字段。 */ + bool buildObject(int nObjectIndex, QString& sError); + + /** @brief 删除上一个对象的分组控件和字段对象。 */ + void clearObjectEditors(); + + /** @brief 创建一个原型式参数分组。 */ + bool buildGroup(const nmReservoirParameterGroupInfo& oGroupInfo, + QString& sError); + + /** @brief 从工作副本加载字段初始值。 */ + void loadFieldValue(nmReservoirParameterField* pField); + + /** @brief 根据当前稳定code统一刷新字段可见性。 */ + void applyVisibilityRules(); + + /** @brief 设置指定稳定参数ID的字段可见性。 */ + void setFieldVisible(const QString& sParameterId, bool bVisible); + + /** @brief 刷新有效状态并通知主对话框。 */ + void updateValidity(); + + nmReservoirPropertiesCategory m_eCategory; ///< 页面分类。 + nmReservoirPropertiesSession* m_pSession; ///< 编辑会话,不拥有所有权。 + nmIReservoirParameterUnitService* m_pUnitService; ///< 主对话框单位服务,不拥有所有权。 + QList m_listObjectInfos; ///< 当前分类对象描述。 + int m_nCurrentObjectIndex; ///< 当前对象索引。 + bool m_bUpdatingObject; ///< 阻止对象下拉框回滚重入。 + bool m_bBuildingFields; ///< 阻止加载数据时触发业务信号。 + + QGroupBox* m_pObjectDisplayGroup; ///< 对象显示控制分组。 + QLabel* m_pObjectLabel; ///< 对象显示标签。 + QComboBox* m_pObjectComboBox; ///< 多对象选择下拉框。 + QWidget* m_pGroupsWidget; ///< 无边框的分组布局载体。 + QGridLayout* m_pGroupsLayout; ///< 两列分组布局。 + QVBoxLayout* m_pMainLayout; ///< 页面主布局。 + QLabel* m_pEmptyLabel; ///< 空对象提示。 + QList m_listFields; ///< 当前对象全部字段。 + QMap m_mapFields; ///< 稳定ID到字段映射。 + QMap m_mapEditorFields; ///< 编辑器到字段映射。 +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h new file mode 100644 index 0000000..6422d17 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h @@ -0,0 +1,93 @@ +#pragma once + +#include "nmSubWxs_global.h" + +#include "nmDataReservoir.h" +#include "nmDataVerticalWell.h" +#include "nmDataVerticalFracturedWell.h" +#include "nmDataHorizontalFracturedWell.h" +#include "nmDataRegionMark.h" +#include "nmDataFault.h" +#include "nmDataFracture.h" +#include "nmDataRegion.h" + +class nmDataAnalyzeManager; + +/** + * @brief 储层参数编辑快照。 + * @note 快照保存一次编辑会话所需的全部数据副本,不包含普通水平井。 + */ +struct NM_SUB_WXS_EXPORT nmReservoirPropertiesSnapshot +{ + /** @brief 构造空快照。 */ + nmReservoirPropertiesSnapshot(); + + int m_nSolverModelType; ///< 打开对话框时的求解器模型类型数值。 + nmDataReservoir m_oReservoir; ///< 储层参数副本。 + QVector m_vecVerticalWells; ///< 直井参数副本。 + QVector m_vecVerticalFracturedWells; ///< 垂直压裂井参数副本。 + QVector m_vecHorizontalFracturedWells; ///< 水平压裂井参数副本。 + QVector m_vecRegionMarks; ///< 区域标记参数副本。 + QVector m_vecFaults; ///< 断层参数副本。 + QVector m_vecFractures; ///< 裂缝参数副本,包含DFN以保持提交索引稳定。 + QVector m_vecRegions; ///< 复合区参数副本。 +}; + +/** + * @brief 储层参数数据源接口。 + * @note 对话框只依赖此接口,不直接访问全局数据管理器。 + */ +class NM_SUB_WXS_EXPORT nmIReservoirPropertiesDataSource +{ +public: + /** @brief 析构数据源接口。 */ + virtual ~nmIReservoirPropertiesDataSource(); + + /** + * @brief 读取当前分析窗口的数据快照。 + * @param oSnapshot 输出的工作快照。 + * @param sError 输出的错误信息。 + * @return 读取成功返回true。 + */ + virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const = 0; + + /** + * @brief 一次性提交编辑后的工作快照。 + * @param oSnapshot 待提交的工作快照。 + * @param bGeometryChanged 井坐标或几何参数是否发生变化。 + * @param sError 输出的错误信息。 + * @return 提交成功返回true。 + */ + virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError) = 0; +}; + +/** + * @brief 基于nmDataAnalyzeManager的数据源适配器。 + */ +class NM_SUB_WXS_EXPORT nmAnalyzeManagerReservoirDataSource : + public nmIReservoirPropertiesDataSource +{ +public: + /** + * @brief 构造数据源适配器。 + * @param pDataManager 当前分析窗口的数据管理器,不转移所有权。 + */ + explicit nmAnalyzeManagerReservoirDataSource(nmDataAnalyzeManager* pDataManager); + + /** @brief 析构数据源适配器。 */ + virtual ~nmAnalyzeManagerReservoirDataSource(); + + virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const; + + virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError); + +private: + nmDataAnalyzeManager* m_pDataManager; ///< 当前分析窗口的数据管理器,不拥有所有权。 +}; + diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h new file mode 100644 index 0000000..fa93af9 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h @@ -0,0 +1,98 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirPropertiesDataSource.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include + +class nmAttrRegistry; + +/** + * @brief 储层参数编辑会话。 + * @note 会话持有独立工作副本和独立属性注册表;取消时直接销毁会话即可。 + */ +class NM_SUB_WXS_EXPORT nmReservoirPropertiesSession +{ +public: + /** + * @brief 构造编辑会话。 + * @param pDataSource 参数数据源,不转移所有权。 + */ + explicit nmReservoirPropertiesSession(nmIReservoirPropertiesDataSource* pDataSource); + + /** @brief 析构编辑会话及其独立注册表。 */ + ~nmReservoirPropertiesSession(); + + /** + * @brief 从数据源创建原始快照和工作副本。 + * @param sError 输出的错误信息。 + * @return 初始化成功返回true。 + */ + bool initialize(QString& sError); + + /** + * @brief 获取指定分类的对象描述。 + * @param eCategory 页面分类。 + * @return 对象描述列表。 + */ + QList objectInfos( + nmReservoirPropertiesCategory eCategory); + + /** + * @brief 获取工作副本中的参数值。 + * @param sParameterId 稳定参数ID。 + * @return 参数值;不存在时返回无效QVariant。 + */ + QVariant value(const QString& sParameterId) const; + + /** + * @brief 修改工作副本中的参数值。 + * @param sParameterId 稳定参数ID。 + * @param oValue 基准单位下的新值。 + * @return 参数存在并完成修改时返回true。 + */ + bool setValue(const QString& sParameterId, const QVariant& oValue); + + /** + * @brief 批量修改工作副本中的参数值。 + * @param mapValues 稳定参数ID到基准值的映射。 + */ + void setValues(const QMap& mapValues); + + /** + * @brief 获取枚举参数的稳定code。 + * @param sParameterId 稳定枚举参数ID。 + * @return 稳定业务code。 + */ + QString enumCode(const QString& sParameterId) const; + + /** + * @brief 修改枚举参数的稳定code。 + * @param sParameterId 稳定枚举参数ID。 + * @param sCode 稳定业务code。 + * @return 修改成功返回true。 + */ + bool setEnumCode(const QString& sParameterId, const QString& sCode); + + /** + * @brief 提交工作副本。 + * @param sError 输出的错误信息。 + * @return 提交成功返回true。 + */ + bool commit(QString& sError); + + /** @brief 获取只读工作副本,供后续导入预览或测试使用。 */ + const nmReservoirPropertiesSnapshot& workingSnapshot() const; + +private: + /** @brief 判断井坐标或几何参数是否发生变化。 */ + bool isGeometryChanged() const; + + nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。 + nmAttrRegistry* m_pAttrRegistry; ///< 编辑会话独占的属性注册表。 + nmReservoirPropertiesSnapshot m_oOriginalSnapshot; ///< 打开对话框时的原始快照。 + nmReservoirPropertiesSnapshot m_oWorkingSnapshot; ///< 所有界面编辑写入的工作副本。 + bool m_bInitialized; ///< 会话是否初始化成功。 +}; diff --git a/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h new file mode 100644 index 0000000..32fed00 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h @@ -0,0 +1,148 @@ +#pragma once + +#include "iDlgBase.h" +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" +#include "nmReservoirParameterField.h" + +class nmIReservoirPropertiesDataSource; +class nmReservoirPropertiesSession; +class nmReservoirParameterPage; +class QButtonGroup; +class QDialogButtonBox; +class QFrame; +class QHBoxLayout; +class QLabel; +class QStackedWidget; +class QToolButton; + +/** + * @brief 数值试井储层特性参数编辑器。 + * @note 对话框是唯一可见面板,负责原型式导航、单位服务、整体校验和统一提交。 + */ +class NM_SUB_WXS_EXPORT nmWxReservoirPropertiesEditor : + public iDlgBase, + public nmIReservoirParameterUnitService +{ + Q_OBJECT + +public: + /** + * @brief 构造储层特性参数编辑器。 + * @param pDataSource 参数数据源,不转移所有权。 + * @param pParent 父窗口。 + */ + nmWxReservoirPropertiesEditor( + nmIReservoirPropertiesDataSource* pDataSource, + QWidget* pParent = nullptr); + + /** @brief 析构编辑器。 */ + virtual ~nmWxReservoirPropertiesEditor(); + + /** + * @brief 初始化编辑会话和全部页面。 + * @param sError 输出初始化错误。 + * @return 初始化成功返回true。 + */ + bool initialize(QString& sError); + + /** @brief 通过iDlgBase按NM参数系列绑定单位控件。 */ + virtual bool bindUnitField(QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId); + + /** @brief 将基准单位数值写入字段。 */ + virtual void setUnitBaseValue(QLineEdit* pLineEdit, + double dBaseValue); + + /** @brief 读取字段的基准单位数值。 */ + virtual double unitBaseValue(QLineEdit* pLineEdit) const; + + /** @brief 校验单位字段输入。 */ + virtual bool isUnitInputValid(QLineEdit* pLineEdit); + + /** @brief 返回字段当前显示单位。 */ + virtual QString currentUnit(QLineEdit* pLineEdit) const; + + /** @brief 返回字段单位组,不转移所有权。 */ + virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const; + +public slots: + /** @brief 校验并一次性提交工作副本。 */ + virtual void accept(); + + /** @brief 丢弃工作副本并关闭窗口。 */ + virtual void reject(); + +private slots: + /** @brief 切换顶部参数分类。 */ + void slotCategoryButtonClicked(int nCategory); + + /** @brief 根据各页面状态更新确定按钮。 */ + void slotPageValidityChanged(bool bValid); + + /** @brief 打开系统帮助文档。 */ + void slotHelp(); + +private: + /** @brief 创建编辑器的原型式固定布局。 */ + void createUi(); + + /** @brief 创建顶部分组导航。 */ + QWidget* createCategoryBar(); + + /** + * @brief 创建一个带底部分组标题的ribbon区域。 + * @param sCaption 分组标题。 + * @param pParent 父控件。 + * @param pCommandLayout 输出的命令按钮布局,不转移所有权。 + * @return 创建完成的分组控件。 + */ + QWidget* createRibbonGroup(const QString& sCaption, + QWidget* pParent, + QHBoxLayout*& pCommandLayout); + + /** + * @brief 创建框架风格的导航分组竖向分隔线。 + * @param pParent 分隔线所属的顶部导航面板。 + * @return 创建完成的Qt原生分隔线。 + */ + QFrame* createRibbonSeparator(QWidget* pParent); + + /** + * @brief 创建一个参数分类按钮。 + * @param eCategory 分类枚举。 + * @param sText 按钮文字。 + * @param sIconName 框架图标名称。 + * @param pParent 所属ribbon分组。 + * @return 创建完成的工具按钮。 + */ + QToolButton* createCategoryButton( + nmReservoirPropertiesCategory eCategory, + const QString& sText, + const QString& sIconName, + QWidget* pParent); + + /** @brief 创建帮助命令按钮。 */ + QToolButton* createHelpButton(QWidget* pParent); + + /** @brief 创建六个共享参数页面。 */ + void createPages(); + + /** @brief 根据各分类的实际对象数量更新顶部按钮启用状态。 */ + void updateCategoryButtonStates(); + + /** @brief 校验所有页面并更新确定按钮。 */ + bool validateAllPages(); + + nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。 + nmReservoirPropertiesSession* m_pSession; ///< 对话框独占编辑会话。 + QButtonGroup* m_pCategoryButtonGroup; ///< 顶部分类按钮及稳定页面ID映射。 + QStackedWidget* m_pStackedWidget; ///< 无边框分类页面堆栈。 + QDialogButtonBox* m_pButtonBox; ///< 确定和取消按钮区。 + QToolButton* m_pFooterHelpButton; ///< 底部帮助命令。 + QLabel* m_pStatusLabel; ///< 校验或提交错误提示。 + nmReservoirParameterPage* m_pPages[NM_RESERVOIR_PAGE_COUNT]; ///< 六个参数页。 + int m_nCurrentCategory; ///< 当前显示分类。 + bool m_bInitialized; ///< 编辑器是否初始化完成。 +}; diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp index d8d9ce5..021b101 100644 --- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp @@ -1,4 +1,4 @@ -#include "nmCalculationDllPebiSolverTask.h" +#include "nmCalculationDllPebiSolverTask.h" #include "singlePhaseSolver.h" #include "zxLogInstance.h" #include "nmDataAnalyzeManager.h" @@ -149,8 +149,11 @@ bool applyPropertyInterpolation( solverValues->resize(interpolationValues.size()); for(int valueIndex = 0; valueIndex < interpolationValues.size(); ++valueIndex) { - // 插值数据已经使用求解器基准单位,结果可直接按网格顺序写入. - (*solverValues)[valueIndex] = interpolationValues[valueIndex]; + // 属性插值数据层以mD保存;渗透率在写入PEBI数组时转换为D。 + (*solverValues)[valueIndex] = dataSet.property == "k" + ? nmCalculationUtils::milliDarcyToDarcy( + interpolationValues[valueIndex]) + : interpolationValues[valueIndex]; } *propertyApplied = true; } @@ -606,7 +609,11 @@ bool nmCalculationDllPebiSolverTask::execPebiMode() p0.Base.Swi = pReservoirData->getSwi().getValue().toDouble(); // 初始含水饱和度 // 根据网格单元数设置每个单元的参数 size_t cellCount = pGridInstance->getGridOutput2().Trinodexy.size(); - p0.Base.k = dVec1(cellCount, pReservoirData->getPermeability().getValue().toDouble()); + // 数据层以mD保存渗透率,PEBI输入数组要求使用D。 + const double dPermeabilityDarcy = + nmCalculationUtils::milliDarcyToDarcy( + pReservoirData->getPermeability().getValue().toDouble()); + p0.Base.k = dVec1(cellCount, dPermeabilityDarcy); p0.Base.phi = dVec1(cellCount, pReservoirData->getPorosity().getValue().toDouble()); p0.Base.h = dVec1(cellCount, pReservoirData->getThickness().getValue().toDouble()); } diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index 979accd..c61ad8b 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -1,4 +1,4 @@ -#include "nmCalculationPebiGrid.h" +#include "nmCalculationPebiGrid.h" #include #include #include @@ -1069,7 +1069,9 @@ bool nmCalculationPebiGrid::generateOutputPara() scene.Base.Swi = pReservoirData->getSwi().getValue().toDouble(); // 保存参考值(用于Python采样) - scene.Base.k_ref = pReservoirData->getPermeability().getValue().toDouble(); + // 训练场景最终会直接填入PEBI输入结构,写文件前转换为求解器使用的D。 + scene.Base.k_ref = nmCalculationUtils::milliDarcyToDarcy( + pReservoirData->getPermeability().getValue().toDouble()); scene.Base.phi_ref = pReservoirData->getPorosity().getValue().toDouble(); scene.Base.h_ref = pReservoirData->getThickness().getValue().toDouble(); } diff --git a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp index 5aca5ac..e45a18a 100644 --- a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp @@ -37,6 +37,12 @@ void setKrigingError(QString* errorMessage, const QString& message) nmCalculationUtils::nmCalculationUtils() { } +double nmCalculationUtils::milliDarcyToDarcy(double dPermeabilityMilliDarcy) +{ + // PEBI输入结构使用D,数据层统一使用mD,因此仅在求解器边界换算。 + return dPermeabilityMilliDarcy / 1000.0; +} + bool nmCalculationUtils::copyFileToDir(QString filePath, QString destDir) { // 如果文件不存在,则退出 if(!QFile::exists(filePath)) { diff --git a/Src/nmNum/nmData/nmDataAttribute.cpp b/Src/nmNum/nmData/nmDataAttribute.cpp index afd14f3..28dae7a 100644 --- a/Src/nmNum/nmData/nmDataAttribute.cpp +++ b/Src/nmNum/nmData/nmDataAttribute.cpp @@ -1,4 +1,4 @@ -#include "nmDataAttribute.h" +#include "nmDataAttribute.h" #include @@ -413,7 +413,8 @@ UnitType nmDataAttribute::detectUnitType(const QString& unit) { } // 渗透率单位 - if (unit == "md" || unit == "Darcy" || unit == "m^2" || unit == "cm^2" || unit == "um^2") { + if (unit == "mD" || unit == "D" || unit == "md" || unit == "Darcy" || + unit == "m^2" || unit == "cm^2" || unit == "um^2") { return UNIT_TYPE_PERMEABILITY; } @@ -578,9 +579,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro // 统一转换为Darcy double valueInDarcy = value; - if (fromUnit == "md") { - valueInDarcy = value / 1000.0; // 1 Darcy = 1000 md - } else if (fromUnit == "Darcy") { + if (fromUnit == "mD" || fromUnit == "md") { + valueInDarcy = value / 1000.0; // 1 D = 1000 mD + } else if (fromUnit == "D" || fromUnit == "Darcy") { valueInDarcy = value; } else if (fromUnit == "m^2") { valueInDarcy = value * 9.869233e-13; // 1 m^2 = 9.869233e-13 Darcy @@ -593,9 +594,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro } // 从Darcy转换为目标单位 - if (toUnit == "Darcy") { + if (toUnit == "D" || toUnit == "Darcy") { return valueInDarcy; - } else if (toUnit == "md") { + } else if (toUnit == "mD" || toUnit == "md") { return valueInDarcy * 1000.0; } else if (toUnit == "m^2") { return valueInDarcy / 9.869233e-13; diff --git a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp index af01ce0..45dd167 100644 --- a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp +++ b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp @@ -15,7 +15,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_fractureHalfLengthSelected = false; // 仅压裂井可用,默认不选中 // 拟合上下界不再使用固定默认值,由自动拟合窗口按数据对象初值和物理边界生成。 - m_permeabilityMax = nmDataAttribute("Permeability Max", QVariant(), "Darcy"); + m_permeabilityMax = nmDataAttribute("Permeability Max", QVariant(), "mD"); m_skinMax = nmDataAttribute("Skin Max", QVariant(), ""); m_wellboreStorageMax = nmDataAttribute("Wellbore Storage Max", QVariant(), "m^3/MPa"); m_porosityMax = nmDataAttribute("Porosity Max", QVariant(), ""); @@ -26,7 +26,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_fractureConductivityMax = nmDataAttribute("Fracture Conductivity Max", QVariant(), "md.m"); m_fractureHalfLengthMax = nmDataAttribute("Fracture Half Length Max", QVariant(), "m"); - m_permeabilityMin = nmDataAttribute("Permeability Min", QVariant(), "Darcy"); + m_permeabilityMin = nmDataAttribute("Permeability Min", QVariant(), "mD"); m_skinMin = nmDataAttribute("Skin Min", QVariant(), ""); m_wellboreStorageMin = nmDataAttribute("Wellbore Storage Min", QVariant(), "m^3/MPa"); m_porosityMin = nmDataAttribute("Porosity Min", QVariant(), ""); @@ -34,7 +34,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_ctMin = nmDataAttribute("Ct Min", QVariant(), ""); m_cfMin = nmDataAttribute("Cf Min", QVariant(), ""); m_swiMin = nmDataAttribute("Swi Min", QVariant(), ""); - m_fractureConductivityMin = nmDataAttribute("Fracture Conductivity Min", QVariant(), "md.m"); + m_fractureConductivityMin = nmDataAttribute("Fracture Conductivity Min", QVariant(), "mD.m"); m_fractureHalfLengthMin = nmDataAttribute("Fracture Half Length Min", QVariant(), "m"); // 初始化迭代参数 @@ -187,6 +187,8 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最大值 if (jsonValue.HasMember("PermeabilityMax") && jsonValue["PermeabilityMax"].IsObject()) { m_permeabilityMax.FromJsonValue(jsonValue["PermeabilityMax"]); + // 自动拟合上下限统一按数据层基准单位mD解释,不兼容旧JSON的D数值。 + m_permeabilityMax.setUnit("mD"); } if (jsonValue.HasMember("SkinMax") && jsonValue["SkinMax"].IsObject()) { m_skinMax.FromJsonValue(jsonValue["SkinMax"]); @@ -219,6 +221,7 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最小值 if (jsonValue.HasMember("PermeabilityMin") && jsonValue["PermeabilityMin"].IsObject()) { m_permeabilityMin.FromJsonValue(jsonValue["PermeabilityMin"]); + m_permeabilityMin.setUnit("mD"); } if (jsonValue.HasMember("SkinMin") && jsonValue["SkinMin"].IsObject()) { m_skinMin.FromJsonValue(jsonValue["SkinMin"]); diff --git a/Src/nmNum/nmData/nmDataDiagnostic.cpp b/Src/nmNum/nmData/nmDataDiagnostic.cpp index 973186c..ca34818 100644 --- a/Src/nmNum/nmData/nmDataDiagnostic.cpp +++ b/Src/nmNum/nmData/nmDataDiagnostic.cpp @@ -1,4 +1,4 @@ -#include "nmDataDiagnostic.h" +#include "nmDataDiagnostic.h" #include "nmDataWellBase.h" #include "nmDataReservoir.h" #include @@ -15,7 +15,7 @@ nmDataDiagnostic::nmDataDiagnostic() { m_diagnosticSkin = nmDataAttribute("Skin", 0.0, ""); m_diagnosticWellboreStorage = nmDataAttribute("Wellbore storage", 0.01, "m^3/MPa", UNIT_TYPE_COMPRESSIBILITY, QStringList(), QStringList() << "bbl/psi" << "m^3/bar" << "m^3/kPa" << "m^3/Pa" << "m^3.cm^2/kg" << "m^2" << "m^3/MPa"); - m_diagnosticPermeability = nmDataAttribute("Permeability", 0.025, "md", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2"); + m_diagnosticPermeability = nmDataAttribute("Permeability", 25.0, "mD", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "mD" << "D" << "m^2" << "cm^2" << "um^2"); m_diagnosticTransmissibility = nmDataAttribute("Transmissibility", 1000.0, "md.m", UNIT_TYPE_CONDUCTIVITY, QStringList(), QStringList()<< "md.ft" << "md.m" << "m^3"); } @@ -258,7 +258,7 @@ void nmDataDiagnostic::calculateTransmissibility(const QVector>& DEBUG_OUT(QString("=== Transmissibility Analysis Result ===")); DEBUG_OUT(QString("Selected method: %1").arg(selectedAnalysis->description)); - DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6)); + DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6)); DEBUG_OUT(QString("Analysis time: %1 hr").arg(selectedAnalysis->avgTime, 0, 'f', 4)); DEBUG_OUT(QString("Derivative value used: %1 MPa").arg(selectedAnalysis->avgPressure, 0, 'f', 6)); } else { @@ -292,9 +292,9 @@ void nmDataDiagnostic::calculatePermeability(nmDataWellBase* pWell, nmDataReserv m_diagnosticPermeability.setValue(kValue); DEBUG_OUT(QString("=== Permeability Analysis Result ===")); - DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6)); + DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6)); DEBUG_OUT(QString("Reservoir thickness (h): %1 m").arg(thickness, 0, 'f', 2)); - DEBUG_OUT(QString("Permeability (k): %1 md").arg(kValue, 0, 'f', 6)); + DEBUG_OUT(QString("Permeability (k): %1 mD").arg(kValue, 0, 'f', 6)); } //void nmDataDiagnostic::calculateSkin(const QVector>& rawData, diff --git a/Src/nmNum/nmData/nmDataReservoir.cpp b/Src/nmNum/nmData/nmDataReservoir.cpp index e07e007..73f25b0 100644 --- a/Src/nmNum/nmData/nmDataReservoir.cpp +++ b/Src/nmNum/nmData/nmDataReservoir.cpp @@ -1,17 +1,18 @@ -#include "nmDataReservoir.h" +#include "nmDataReservoir.h" #include "ZxSerializer.h" nmDataReservoir::nmDataReservoir() { // 基础属性 m_initialPressure = nmDataAttribute("Initial Pressure",40.0, "MPa", UNIT_TYPE_PRESSURE, QStringList(), QStringList() << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2" << "m" << "psig" << "bar" << "MPa" << "kPag"); - m_permeability = nmDataAttribute("Permeability", 0.025, "Darcy", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2"); + // 数据层基准单位固定为mD;进入PEBI求解器前再统一转换为D。 + m_permeability = nmDataAttribute("Permeability", 25.0, "mD"); m_thickness = nmDataAttribute("Thickness", 10.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_porosity = nmDataAttribute("Porosity", 0.1, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_kxKy = nmDataAttribute("Kx/Ky", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); // 油相PVT单值 m_Bo = nmDataAttribute("Bo", 1.2, ""); - m_Miuo = nmDataAttribute("Miuo", 0.5, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); + m_Miuo = nmDataAttribute("Miuo", 0.5, "mPa.s"); // 气相PVT单值 m_Bg = nmDataAttribute("Bg", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); @@ -22,8 +23,8 @@ nmDataReservoir::nmDataReservoir() { m_Miuw = nmDataAttribute("Miuw", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); // 压缩系数 - m_Ct = nmDataAttribute("Ct", 0.001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); - m_Cf = nmDataAttribute("Cf", 0.0001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); + m_Ct = nmDataAttribute("Ct", 0.001, "1/MPa"); + m_Cf = nmDataAttribute("Cf", 0.0001, "1/MPa"); // 储层类型与传导率 m_reservoirType = nmDataAttribute("Reservoir type", "Homogeneous", "", UNIT_TYPE_DIMENSIONLESS, QStringList() << "Homogeneous" << "Dual porosity pseudo steady state", QStringList()); @@ -40,7 +41,7 @@ nmDataReservoir::nmDataReservoir() { void nmDataReservoir::resetToDefaults() { - m_permeability.setValue(0.025); + m_permeability.setValue(25.0); m_transmissibility.setValue(1000.0); } @@ -147,6 +148,8 @@ void nmDataReservoir::FromJsonValue(const rapidjson::Value& jsonValue) } if (jsonValue.HasMember("Permeability") && jsonValue["Permeability"].IsObject()) { m_permeability.FromJsonValue(jsonValue["Permeability"]); + // JSON中的单位文本不参与兼容换算,读取后的数据层单位始终固定为mD。 + m_permeability.setUnit("mD"); } if (jsonValue.HasMember("Thickness") && jsonValue["Thickness"].IsObject()) { m_thickness.FromJsonValue(jsonValue["Thickness"]); @@ -240,11 +243,11 @@ bool nmDataReservoir::_parseData(VecVariant vec, int& n) { m_initialPressure = nmDataAttribute("Initial Pressure", vec[n++].toString(), "MPa"); m_reservoirType = nmDataAttribute("Reservoir Type", vec[n++].toString(), ""); m_Bo = nmDataAttribute("Bo", vec[n++].toString(), ""); - m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s(cp)"); + m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s"); m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "mD"); m_thickness = nmDataAttribute("Thickness", vec[n++].toString(), "m"); m_porosity = nmDataAttribute("Porosity", vec[n++].toString(), ""); - m_Ct = nmDataAttribute("Ct", vec[n++].toString(), ""); + m_Ct = nmDataAttribute("Ct", vec[n++].toString(), "1/MPa"); m_kxKy = nmDataAttribute("Kx/Ky", vec[n++].toString(), ""); return true; } @@ -280,11 +283,12 @@ void nmDataReservoir::onDeserialize(ZxSerializer* ser) { ser->read("InitialPressure", tempValue); m_initialPressure = nmDataAttribute("Initial Pressure", tempValue, "MPa"); ser->read("ReservoirType", tempValue); m_reservoirType = nmDataAttribute("Reservoir Type", tempValue, ""); ser->read("Bo", tempValue); m_Bo = nmDataAttribute("Bo", tempValue, ""); - ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s(cp)"); + ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s"); + // 序列化格式只保存数值,读取时明确按数据层基准单位mD解释。 ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "mD"); ser->read("Thickness", tempValue); m_thickness = nmDataAttribute("Thickness", tempValue, "m"); ser->read("Porosity", tempValue); m_porosity = nmDataAttribute("Porosity", tempValue, ""); - ser->read("NetToGross", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, ""); + ser->read("Ct", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, "1/MPa"); ser->read("KxKy", tempValue); m_kxKy = nmDataAttribute("Kx/Ky", tempValue, ""); } diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp index 4574dbc..ec424fd 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp @@ -56,7 +56,8 @@ #include "nmWxRCDialog.h" #include "nmWxWellLayerDlg.h" #include "nmWxGeometryLayerDlg.h" -#include "nmWxReservoirPropertiesDlg.h" +#include "nmReservoirPropertiesDataSource.h" +#include "nmWxReservoirPropertiesEditor.h" #include "nmWxPropertyInterpolationDlg.h" #include "nmWxPostprocessingAnimationWidget.h" #include "nmWxGeoRefDlg.h" @@ -1979,10 +1980,29 @@ bool nmSubWndMain::onConfirmClosing() void nmSubWndMain::reservoirCharacteristics() { - nmWxReservoirPropertiesDlg dlg; - dlg.exec(); + // 第一步:取得当前分析窗口对应的数据管理器,避免新对话框访问全局单例。 + nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::getCurrentInstance(); + if (pDataManager == nullptr) + { + QMessageBox::warning(this, tr("Reservoir properties"), + tr("The current numerical well-test data is unavailable.")); + return; + } + + // 第二步:在入口处组装数据源和编辑器,两个对象的生命周期覆盖整个模态会话。 + nmAnalyzeManagerReservoirDataSource oDataSource(pDataManager); + nmWxReservoirPropertiesEditor oEditor(&oDataSource, this); + + // 第三步:先建立工作副本;初始化失败时不打开不完整的参数界面。 + QString sError; + if (!oEditor.initialize(sError)) + { + QMessageBox::warning(this, tr("Reservoir properties"), sError); + return; + } - // TODO: 修改完参数应该刷新画布 + // 第四步:确定时由编辑会话一次性提交,取消时真实数据保持不变。 + oEditor.exec(); } void nmSubWndMain::geoLayering() diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp new file mode 100644 index 0000000..55a636a --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -0,0 +1,1029 @@ +#include "nmReservoirParameterCatalog.h" + +#include "nmReservoirPropertiesDataSource.h" +#include "nmAttrRegistry.h" +#include "nmDataAnalyzeManager.h" +#include "nmDataAttribute.h" +#include "nmDataPerforation.h" + +#include + +namespace +{ + +/* + * Qt 4.8的lupdate无法跟踪editorText()的间接参数,以下标记只用于 + * 收集中英文资源;运行时仍由同一翻译上下文返回文字。 + */ +static const char* const s_pCatalogTranslationMarkers[] = +{ + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir type"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Homogeneous"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual porosity pseudo steady state"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fault flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary type"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Leaky"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite limit"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Permeable boundary"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite boundary"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fracture flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Finite conductivity"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Infinite conductivity"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Position and wellbore"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage and fracture"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic and medium properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fluid parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Oil phase parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Water phase parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility and saturation"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fractured vertical well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Multistage fractured horizontal well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir medium parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Geometry"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Flow properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Conductivity properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary properties") +}; + +/** @brief 返回当前语言下的界面文字。 */ +QString editorText(const char* pText) +{ + Q_UNUSED(s_pCatalogTranslationMarkers); + return QCoreApplication::translate("nmWxReservoirPropertiesEditor", pText); +} + +/** @brief 创建一个稳定枚举选项。 */ +nmReservoirEnumOption enumOption(const QString& sCode, const char* pText) +{ + nmReservoirEnumOption oOption; + oOption.m_sCode = sCode; + oOption.m_sText = editorText(pText); + return oOption; +} + +/** @brief 创建一个数值字段描述。 */ +nmReservoirParameterFieldInfo numericField( + const QString& sParameterId, + const QString& sBaseParameterId, + nmReservoirParameterEditorType eEditorType) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sBaseParameterId = sBaseParameterId; + oField.m_eEditorType = eEditorType; + oField.m_bUnitEnabled = true; + return oField; +} + +/** @brief 创建一个浮点数字段描述。 */ +nmReservoirParameterFieldInfo numericField( + const QString& sParameterId, + const QString& sBaseParameterId) +{ + return numericField(sParameterId, sBaseParameterId, + NM_RESERVOIR_EDITOR_NUMBER); +} + +/** @brief 创建一个明确不显示单位的浮点数字段。 */ +nmReservoirParameterFieldInfo unitlessNumericField( + const QString& sParameterId, + const QString& sBaseParameterId) +{ + nmReservoirParameterFieldInfo oField = + numericField(sParameterId, sBaseParameterId); + oField.m_bUnitEnabled = false; + return oField; +} + +/** @brief 创建储层类型字段。 */ +nmReservoirParameterFieldInfo reservoirModelField( + const QString& sParameterId) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText("Reservoir type"); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption("homogeneous", "Homogeneous")); + oField.m_listOptions.append(enumOption( + "dual_porosity_pss", "Dual porosity pseudo steady state")); + return oField; +} + +/** @brief 按指定显示文字创建断层或复合区流动模型字段。 */ +nmReservoirParameterFieldInfo leakageModelField( + const QString& sParameterId, + const char* pLabel, + const char* pLeakyText, + const char* pCompositeText) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText(pLabel); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption("leaky", pLeakyText)); + oField.m_listOptions.append(enumOption( + "composite_limit", pCompositeText)); + return oField; +} + +/** @brief 创建裂缝导流模型字段。 */ +nmReservoirParameterFieldInfo fractureModelField( + const QString& sParameterId) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText("Fracture flow model"); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption( + "finite_conductivity", "Finite conductivity")); + oField.m_listOptions.append(enumOption( + "infinite_conductivity", "Infinite conductivity")); + return oField; +} + +/** @brief 创建页面上的一个参数分组。 */ +nmReservoirParameterGroupInfo parameterGroup( + const char* pTitle, + int nRow, + int nColumn, + int nColumnSpan) +{ + nmReservoirParameterGroupInfo oGroup; + oGroup.m_sTitle = editorText(pTitle); + oGroup.m_nRow = nRow; + oGroup.m_nColumn = nColumn; + oGroup.m_nRowSpan = 1; + oGroup.m_nColumnSpan = nColumnSpan; + oGroup.m_bValueRightAligned = false; + oGroup.m_bFieldsCentered = false; + return oGroup; +} + +/** @brief 返回当前求解器模型对应的流体参数分组标题。 */ +const char* solverPvtGroupTitle( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + return "Oil phase parameters"; + case SMT_Water_ConstPvt: + return "Water phase parameters"; + default: + if (nSolverModelType == 0 && ePhaseType == PHASE_Oil) + { + return "Oil phase parameters"; + } + if (nSolverModelType == 0 && ePhaseType == PHASE_Water) + { + return "Water phase parameters"; + } + return "Fluid parameters"; + } +} + +/** @brief 按求解器模型向流体分组添加实际使用的PVT单值参数。 */ +void appendSolverPvtFields( + nmReservoirParameterGroupInfo& oGroup, + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + oGroup.m_listFields + << numericField("Miuo", "Miuo") + << unitlessNumericField("Bo", "Bo"); + break; + case SMT_Water_ConstPvt: + oGroup.m_listFields + << numericField("Miuw", "Miuw") + << unitlessNumericField("Bw", "Bw"); + break; + default: + // 自定义数据源未提供模型类型时,按单相相态保留兼容入口。 + if (nSolverModelType == 0 && + (ePhaseType == PHASE_Oil || + ePhaseType == PHASE_UNKNOWN)) + { + oGroup.m_listFields + << numericField("Miuo", "Miuo") + << unitlessNumericField("Bo", "Bo"); + } + else if (nSolverModelType == 0 && + ePhaseType == PHASE_Water) + { + oGroup.m_listFields + << numericField("Miuw", "Miuw") + << unitlessNumericField("Bw", "Bw"); + } + break; + } +} + +/** @brief 判断当前模型是否需要编辑初始含水饱和度。 */ +bool solverUsesInitialWaterSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Oil_Water_TwoPhase || + (nSolverModelType == 0 && + ePhaseType == PHASE_Oil_Water); +} + +/** @brief 判断当前模型是否需要编辑初始含油饱和度。 */ +bool solverUsesInitialOilSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Oil_Water_TwoPhase || + (nSolverModelType == 0 && + ePhaseType == PHASE_Oil_Water); +} + +/** @brief 判断当前模型是否需要编辑初始含气饱和度。 */ +bool solverUsesInitialGasSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Gas_VariablePvt || + nSolverModelType == SMT_Gas_PseudoPressure || + (nSolverModelType == 0 && + ePhaseType == PHASE_Gas); +} + +/** @brief 按求解器模型添加实际使用的压缩系数和饱和度参数。 */ +void appendSolverCompressionFields( + nmReservoirParameterGroupInfo& oGroup, + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + case SMT_Water_ConstPvt: + oGroup.m_listFields.append(numericField("Cti", "Cti")); + break; + default: + if (nSolverModelType == 0 && + (ePhaseType == PHASE_Oil || + ePhaseType == PHASE_Water || + ePhaseType == PHASE_UNKNOWN)) + { + oGroup.m_listFields.append(numericField("Cti", "Cti")); + } + else + { + oGroup.m_listFields.append(numericField("Cf", "Cf")); + } + break; + } + + if (solverUsesInitialOilSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Soi", "Soi")); + } + if (solverUsesInitialWaterSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Swi", "Swi")); + } + if (solverUsesInitialGasSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Sgi", "Sgi")); + } +} + +/** @brief 为参数ID添加对象编码前缀。 */ +QString prefixed(const QString& sObjectCode, const char* pParameterId) +{ + return sObjectCode + "_" + QString::fromLatin1(pParameterId); +} + +/** @brief 生成无井编码时的会话编码。 */ +QString wellCode(const nmDataWellBase& oWell, + const QString& sFallbackPrefix, + int nIndex) +{ + QString sCode = oWell.getWellCode(); + if (sCode.isEmpty()) + { + sCode = QString("%1%2").arg(sFallbackPrefix) + .arg(nIndex + 1, 4, 10, QChar('0')); + } + return sCode; +} + +/** @brief 创建井对象的分组描述。 */ +void createWellGroups(nmReservoirPropertyObjectInfo& oInfo, + NM_WELL_MODEL eWellType, + bool bHasPerforation) +{ + nmReservoirParameterGroupInfo oPosition = + parameterGroup("Position and wellbore", 0, 0, 1); + oPosition.m_bValueRightAligned = true; + oPosition.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, "W_X"), "W_X") + << numericField(prefixed(oInfo.m_sObjectCode, "W_Y"), "W_Y") + << numericField(prefixed(oInfo.m_sObjectCode, "W_Rw"), "W_Rw"); + if (bHasPerforation) + { + oPosition.m_listFields.append(numericField( + prefixed(oInfo.m_sObjectCode, "W_Skin"), "W_Skin")); + } + + const char* pStorageGroupTitle = eWellType == Vertical_Well + ? "Wellbore storage" : "Wellbore storage and fracture"; + nmReservoirParameterGroupInfo oStorage = + parameterGroup(pStorageGroupTitle, 0, 1, 1); + oStorage.m_listFields.append(numericField( + prefixed(oInfo.m_sObjectCode, "W_C"), "W_C")); + if (eWellType == Vertical_Fractured_Well) + { + oStorage.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureHalfLength"), + "W_FractureHalfLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureAngle"), + "W_FractureAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_Dfc"), "W_Dfc"); + } + else if (eWellType == Horizontal_Fractured_Well) + { + oStorage.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, + "W_WellLength"), + "W_WellLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_DrainAngle"), + "W_DrainAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_NumberOfFractures"), + "W_NumberOfFractures", + NM_RESERVOIR_EDITOR_INTEGER) + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureHalfLength"), + "W_FractureHalfLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureAngle"), + "W_FractureAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_Dfc"), "W_Dfc"); + } + oInfo.m_listGroups << oPosition << oStorage; +} + +/** @brief 注册一口井的全部可编辑数值属性。 */ +void registerWell(nmAttrRegistry* pRegistry, + nmDataWellBase& oWell, + const QString& sCode) +{ + pRegistry->regAttr(prefixed(sCode, "W_X"), &oWell.getX()); + pRegistry->regAttr(prefixed(sCode, "W_Y"), &oWell.getY()); + pRegistry->regAttr(prefixed(sCode, "W_Rw"), &oWell.getRadius()); + pRegistry->regAttr(prefixed(sCode, "W_C"), &oWell.getWellboreStorage()); + if (oWell.getPerforationCount() > 0 && + oWell.getPerforation(0) != nullptr) + { + pRegistry->regAttr(prefixed(sCode, "W_Skin"), + &oWell.getPerforation(0)->getSkin()); + } +} + +/** @brief 判断对象描述中是否包含指定枚举字段。 */ +bool containsEnumField(const nmReservoirPropertyObjectInfo& oInfo, + const QString& sParameterId) +{ + for (int nGroupIndex = 0; + nGroupIndex < oInfo.m_listGroups.size(); + ++nGroupIndex) + { + const nmReservoirParameterGroupInfo& oGroup = + oInfo.m_listGroups[nGroupIndex]; + for (int nFieldIndex = 0; + nFieldIndex < oGroup.m_listFields.size(); + ++nFieldIndex) + { + const nmReservoirParameterFieldInfo& oField = + oGroup.m_listFields[nFieldIndex]; + if (oField.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM && + oField.m_sParameterId == sParameterId) + { + return true; + } + } + } + return false; +} + +} + +void nmReservoirParameterCatalog::registerSnapshot( + nmAttrRegistry* pRegistry, + nmReservoirPropertiesSnapshot& oSnapshot) +{ + if (pRegistry == nullptr) + { + return; + } + + // 第一步:重新建立编辑会话独占的注册表,杜绝与实时数据交叉连接。 + pRegistry->clear(); + pRegistry->regAttr("h", &oSnapshot.m_oReservoir.getThickness()); + pRegistry->regAttr("Pi", &oSnapshot.m_oReservoir.getInitialPressure()); + pRegistry->regAttr("K", &oSnapshot.m_oReservoir.getPermeability()); + pRegistry->regAttr("phi", &oSnapshot.m_oReservoir.getPorosity()); + pRegistry->regAttr("Cti", &oSnapshot.m_oReservoir.getCt()); + pRegistry->regAttr("Cf", &oSnapshot.m_oReservoir.getCf()); + pRegistry->regAttr("Soi", &oSnapshot.m_oReservoir.getSoi()); + pRegistry->regAttr("Sgi", &oSnapshot.m_oReservoir.getSgi()); + pRegistry->regAttr("Swi", &oSnapshot.m_oReservoir.getSwi()); + pRegistry->regAttr("Bo", &oSnapshot.m_oReservoir.getBo()); + pRegistry->regAttr("Miuo", &oSnapshot.m_oReservoir.getMiuo()); + pRegistry->regAttr("Bw", &oSnapshot.m_oReservoir.getBw()); + pRegistry->regAttr("Miuw", &oSnapshot.m_oReservoir.getMiuw()); + + // 第二步:注册求解器支持的三类井及其压裂参数。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalWells.size(); + ++nIndex) + { + nmDataVerticalWell& oWell = oSnapshot.m_vecVerticalWells[nIndex]; + registerWell(pRegistry, oWell, wellCode(oWell, "VWELL", nIndex)); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalFracturedWells.size(); + ++nIndex) + { + nmDataVerticalFracturedWell& oWell = + oSnapshot.m_vecVerticalFracturedWells[nIndex]; + QString sCode = wellCode(oWell, "VFWELL", nIndex); + registerWell(pRegistry, oWell, sCode); + pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"), + &oWell.getFractureHalfLength()); + pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"), + &oWell.getFractureAngle()); + pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc()); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecHorizontalFracturedWells.size(); + ++nIndex) + { + nmDataHorizontalFracturedWell& oWell = + oSnapshot.m_vecHorizontalFracturedWells[nIndex]; + QString sCode = wellCode(oWell, "HFWELL", nIndex); + registerWell(pRegistry, oWell, sCode); + pRegistry->regAttr(prefixed(sCode, "W_WellLength"), + &oWell.getWellLength()); + pRegistry->regAttr(prefixed(sCode, "W_DrainAngle"), + &oWell.getDrainAngle()); + pRegistry->regAttr(prefixed(sCode, "W_NumberOfFractures"), + &oWell.getNumberOfFractures()); + pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"), + &oWell.getFractureHalfLength()); + pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"), + &oWell.getFractureAngle()); + pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc()); + } + + // 第三步:注册区域标记和复合区数值参数。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegionMarks.size(); + ++nIndex) + { + QString sCode = QString("RMARK%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + nmDataRegionMark& oMark = oSnapshot.m_vecRegionMarks[nIndex]; + pRegistry->regAttr(prefixed(sCode, "RM_ComW"), &oMark.getComW()); + pRegistry->regAttr(prefixed(sCode, "RM_ComKr"), &oMark.getComKr()); + pRegistry->regAttr(prefixed(sCode, "RM_NetToGross"), + &oMark.getNetToGross()); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegions.size(); + ++nIndex) + { + QString sCode = QString("REGION%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + pRegistry->regAttr(prefixed(sCode, "R_Leakage"), + &oSnapshot.m_vecRegions[nIndex] + .getRegionLeakage()); + } + + // 第四步:注册断层和普通裂缝;DFN由专用功能维护。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFaults.size(); + ++nIndex) + { + QString sCode = QString("FAULT%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + nmDataFault& oFault = oSnapshot.m_vecFaults[nIndex]; + pRegistry->regAttr(prefixed(sCode, "FT_X0"), &oFault.getStartX()); + pRegistry->regAttr(prefixed(sCode, "FT_Y0"), &oFault.getStartY()); + pRegistry->regAttr(prefixed(sCode, "FT_X1"), &oFault.getEndX()); + pRegistry->regAttr(prefixed(sCode, "FT_Y1"), &oFault.getEndY()); + pRegistry->regAttr(prefixed(sCode, "FT_Leakage"), + &oFault.getFaultLeakage()); + } + + int nVisibleFracture = 0; + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFractures.size(); + ++nIndex) + { + nmDataFracture& oFracture = oSnapshot.m_vecFractures[nIndex]; + if (oFracture.getFractureType().getValue().toString() == "DFN") + { + continue; + } + QString sCode = QString("FRAC%1") + .arg(++nVisibleFracture, 4, 10, QChar('0')); + pRegistry->regAttr(prefixed(sCode, "F_X0"), + &oFracture.getStartX()); + pRegistry->regAttr(prefixed(sCode, "F_Y0"), + &oFracture.getStartY()); + pRegistry->regAttr(prefixed(sCode, "F_X1"), + &oFracture.getEndX()); + pRegistry->regAttr(prefixed(sCode, "F_Y1"), + &oFracture.getEndY()); + pRegistry->regAttr(prefixed(sCode, "F_FC"), + &oFracture.getFractureDfc()); + pRegistry->regAttr(prefixed(sCode, "F_DW"), + &oFracture.getFractureDw()); + } +} + +QList +nmReservoirParameterCatalog::createObjectInfos( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSnapshot& oSnapshot) +{ + QList listInfos; + + if (eCategory == NM_RESERVOIR_PAGE_RESERVOIR) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_RESERVOIR; + oInfo.m_nSourceIndex = 0; + oInfo.m_sObjectCode = "RESERVOIR"; + oInfo.m_sDisplayName = editorText("Reservoir parameters"); + + NM_PHASE_TYPE ePhaseType = + oSnapshot.m_oReservoir.getPhaseType(); + + nmReservoirParameterGroupInfo oBasic = + parameterGroup("Basic and medium properties", 0, 0, 1); + oBasic.m_nRowSpan = 2; + oBasic.m_bValueRightAligned = true; + oBasic.m_listFields + << numericField("Pi", "Pi") + << numericField("K", "K") + << numericField("h", "h") + << numericField("phi", "phi"); + + nmReservoirParameterGroupInfo oFluid = + parameterGroup(solverPvtGroupTitle( + oSnapshot.m_nSolverModelType, + ePhaseType), + 0, 1, 1); + appendSolverPvtFields(oFluid, + oSnapshot.m_nSolverModelType, + ePhaseType); + + bool bUsesSaturation = solverUsesInitialWaterSaturation( + oSnapshot.m_nSolverModelType, ePhaseType) || + solverUsesInitialGasSaturation( + oSnapshot.m_nSolverModelType, ePhaseType); + nmReservoirParameterGroupInfo oCompression = + parameterGroup(bUsesSaturation + ? "Compressibility and saturation" + : "Compressibility", + oFluid.m_listFields.isEmpty() ? 0 : 1, + 1, 1); + if (oFluid.m_listFields.isEmpty()) + { + oCompression.m_nRowSpan = 2; + } + appendSolverCompressionFields(oCompression, + oSnapshot.m_nSolverModelType, + ePhaseType); + oInfo.m_listGroups.append(oBasic); + if (!oFluid.m_listFields.isEmpty()) + { + oInfo.m_listGroups.append(oFluid); + } + oInfo.m_listGroups.append(oCompression); + listInfos.append(oInfo); + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_WELL) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalWells.size(); + ++nIndex) + { + nmDataVerticalWell& oWell = + oSnapshot.m_vecVerticalWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_VERTICAL_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "VWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Vertical well"); + createWellGroups(oInfo, Vertical_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalFracturedWells.size(); + ++nIndex) + { + nmDataVerticalFracturedWell& oWell = + oSnapshot.m_vecVerticalFracturedWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = + NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "VFWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Fractured vertical well"); + createWellGroups(oInfo, Vertical_Fractured_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecHorizontalFracturedWells.size(); + ++nIndex) + { + nmDataHorizontalFracturedWell& oWell = + oSnapshot.m_vecHorizontalFracturedWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = + NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "HFWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Multistage fractured horizontal well"); + createWellGroups(oInfo, Horizontal_Fractured_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_REGION_MARK) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegionMarks.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION_MARK; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("RMARK%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecRegionMarks[nIndex].getRegionMarkName(); + + nmReservoirParameterGroupInfo oDual = + parameterGroup("Reservoir medium parameters", 0, 0, 2); + oDual.m_bFieldsCentered = true; + oDual.m_listFields + << reservoirModelField(prefixed( + oInfo.m_sObjectCode, "RM_ReservoirType")) + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_ComW"), "RM_ComW") + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_ComKr"), "RM_ComKr") + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_NetToGross"), + "RM_NetToGross"); + oInfo.m_listGroups.append(oDual); + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_FAULT) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFaults.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FAULT; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("FAULT%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecFaults[nIndex].getFaultName(); + + nmReservoirParameterGroupInfo oGeometry = + parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_bValueRightAligned = true; + oGeometry.m_listFields + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_X0"), "FT_X0") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Y0"), "FT_Y0") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_X1"), "FT_X1") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Y1"), "FT_Y1"); + + nmReservoirParameterGroupInfo oFlow = + parameterGroup("Flow properties", 0, 1, 1); + oFlow.m_listFields + << leakageModelField(prefixed( + oInfo.m_sObjectCode, "FT_FlowModel"), + "Fault flow model", + "Leaky", + "Composite limit") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Leakage"), + "FT_Leakage"); + oInfo.m_listGroups << oGeometry << oFlow; + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_FRACTURE) + { + int nVisibleFracture = 0; + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFractures.size(); + ++nIndex) + { + nmDataFracture& oFracture = + oSnapshot.m_vecFractures[nIndex]; + if (oFracture.getFractureType().getValue().toString() == + "DFN") + { + continue; + } + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FRACTURE; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("FRAC%1") + .arg(++nVisibleFracture, 4, 10, QChar('0')); + oInfo.m_sDisplayName = oFracture.getFractureName(); + + nmReservoirParameterGroupInfo oGeometry = + parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_bValueRightAligned = true; + oGeometry.m_listFields + << numericField(prefixed( + oInfo.m_sObjectCode, "F_X0"), "F_X0") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_Y0"), "F_Y0") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_X1"), "F_X1") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_Y1"), "F_Y1"); + + nmReservoirParameterGroupInfo oFlow = + parameterGroup("Conductivity properties", 0, 1, 1); + oFlow.m_listFields + << fractureModelField(prefixed( + oInfo.m_sObjectCode, "F_FlowModel")) + << numericField(prefixed( + oInfo.m_sObjectCode, "F_FC"), "F_FC") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_DW"), "F_DW"); + oInfo.m_listGroups << oGeometry << oFlow; + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_COMPOSITE_REGION) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegions.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("REGION%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecRegions[nIndex].getRegoinName(); + + nmReservoirParameterGroupInfo oRegion = + parameterGroup("Boundary properties", 0, 0, 2); + oRegion.m_bFieldsCentered = true; + oRegion.m_listFields + << leakageModelField(prefixed( + oInfo.m_sObjectCode, "R_FlowModel"), + "Boundary type", + "Permeable boundary", + "Composite boundary") + << numericField(prefixed( + oInfo.m_sObjectCode, "R_Leakage"), + "R_Leakage"); + oInfo.m_listGroups.append(oRegion); + listInfos.append(oInfo); + } + } + return listInfos; +} + +QString nmReservoirParameterCatalog::enumCodeFromStoredValue( + const QString& sParameterId, + const QString& sStoredValue) +{ + QString sValue = sStoredValue.trimmed().toLower(); + if (sParameterId.endsWith("ReservoirType")) + { + return sValue.contains("dual") + ? "dual_porosity_pss" : "homogeneous"; + } + if (sParameterId.endsWith("F_FlowModel")) + { + return sValue.contains("infinite") + ? "infinite_conductivity" : "finite_conductivity"; + } + if (sParameterId.endsWith("FlowModel")) + { + return sValue.contains("leaky") ? "leaky" : "composite_limit"; + } + return QString(); +} + +QString nmReservoirParameterCatalog::storedValueFromEnumCode( + const QString& sParameterId, + const QString& sCode) +{ + if (sParameterId.endsWith("ReservoirType")) + { + return sCode == "dual_porosity_pss" + ? "Dual porosity pseudo steady state" : "Homogeneous"; + } + if (sParameterId.endsWith("F_FlowModel")) + { + return sCode == "infinite_conductivity" + ? "Infinite Conductivity" : "Finite Conductivity"; + } + if (sParameterId.endsWith("FlowModel")) + { + return sCode == "leaky" ? "Leaky" : "Composite limit"; + } + return QString(); +} + +QString nmReservoirParameterCatalog::enumCode( + const nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId) +{ + if (sParameterId == "ReservoirType") + { + nmDataReservoir& oReservoir = + const_cast(oSnapshot.m_oReservoir); + return enumCodeFromStoredValue( + sParameterId, + oReservoir.getReservoirType().getValue().toString()); + } + + QList listAll; + nmReservoirPropertiesSnapshot& oWritable = + const_cast(oSnapshot); + listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK, + oWritable); + for (int nInfoIndex = 0; + nInfoIndex < listAll.size(); + ++nInfoIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + listAll[nInfoIndex]; + if (!containsEnumField(oInfo, sParameterId)) + { + continue; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + nmDataRegionMark& oMark = + oWritable.m_vecRegionMarks[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oMark.getReservoirType().getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + nmDataFault& oFault = + oWritable.m_vecFaults[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oFault.getFaultFlowModel().getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + nmDataFracture& oFracture = + oWritable.m_vecFractures[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oFracture.getFractureFlowModel() + .getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + nmDataRegion& oRegion = + oWritable.m_vecRegions[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oRegion.getRegionFlowModel().getValue().toString()); + } + } + return QString(); +} + +bool nmReservoirParameterCatalog::setEnumCode( + nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId, + const QString& sCode) +{ + QString sStoredValue = + storedValueFromEnumCode(sParameterId, sCode); + if (sStoredValue.isEmpty()) + { + return false; + } + + if (sParameterId == "ReservoirType") + { + oSnapshot.m_oReservoir.getReservoirType() + .setValue(sStoredValue); + return true; + } + + QList listAll; + listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK, + oSnapshot); + for (int nInfoIndex = 0; + nInfoIndex < listAll.size(); + ++nInfoIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + listAll[nInfoIndex]; + if (!containsEnumField(oInfo, sParameterId)) + { + continue; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + oSnapshot.m_vecRegionMarks[oInfo.m_nSourceIndex] + .getReservoirType().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + oSnapshot.m_vecFaults[oInfo.m_nSourceIndex] + .getFaultFlowModel().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + oSnapshot.m_vecFractures[oInfo.m_nSourceIndex] + .getFractureFlowModel().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + oSnapshot.m_vecRegions[oInfo.m_nSourceIndex] + .getRegionFlowModel().setValue(sStoredValue); + return true; + } + } + return false; +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp new file mode 100644 index 0000000..70e2cd6 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp @@ -0,0 +1,487 @@ +#include "nmReservoirParameterField.h" + +#include "iParaItemCtrl.h" +#include "iParameter.h" +#include "iSysParaHelper.h" +#include "mModuleDefines.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace +{ + +/* Qt 4.8的lupdate需要显式标记间接翻译字符串。 */ +static const char* const s_pFieldTranslationMarkers[] = +{ + QT_TRANSLATE_NOOP("nmReservoirParameterField", "The parameter layout is unavailable."), + QT_TRANSLATE_NOOP("nmReservoirParameterField", "Parameter definition not found: %1"), + QT_TRANSLATE_NOOP("nmReservoirParameterField", "Failed to bind the unit for parameter: %1") +}; + +/** @brief 返回轻量字段类使用的翻译文字。 */ +QString fieldText(const char* pText) +{ + Q_UNUSED(s_pFieldTranslationMarkers); + return QCoreApplication::translate( + "nmReservoirParameterField", pText); +} + +/** @brief 根据有效状态生成悬浮提示文字。 */ +QString validationToolTip(const QString& sText, bool bValid) +{ + if (bValid) + { + return sText; + } + + QString sEscaped = sText; + sEscaped.replace("&", "&"); + sEscaped.replace("<", "<"); + sEscaped.replace(">", ">"); + sEscaped.replace("\"", """); + sEscaped.replace("\n", "
"); + return "" + + sEscaped + ""; +} + +} + +nmReservoirParameterField::nmReservoirParameterField( + const nmReservoirParameterFieldInfo& oFieldInfo, + nmIReservoirParameterUnitService* pUnitService, + QObject* pParent) + : QObject(pParent), + m_oFieldInfo(oFieldInfo), + m_pUnitService(pUnitService), + m_pParameter(nullptr), + m_pLabel(nullptr), + m_pLineEdit(nullptr), + m_pValueComboBox(nullptr), + m_pUnitComboBox(nullptr), + m_pUnitLabel(nullptr), + m_clrNormalText(), + m_sExternalValidationError(), + m_bVisible(true), + m_bUpdating(false) +{ +} + +nmReservoirParameterField::~nmReservoirParameterField() +{ + m_pUnitService = nullptr; + m_pParameter = nullptr; + m_pLabel = nullptr; + m_pLineEdit = nullptr; + m_pValueComboBox = nullptr; + m_pUnitComboBox = nullptr; + m_pUnitLabel = nullptr; +} + +bool nmReservoirParameterField::initialize(QGridLayout* pLayout, + int nRow, + int nColumnOffset, + QString& sError) +{ + if (pLayout == nullptr) + { + sError = fieldText("The parameter layout is unavailable."); + return false; + } + + // 第一步:枚举字段不依赖XML数值定义,直接创建稳定code下拉框。 + if (isEnum()) + { + createEnumEditor(pLayout, nRow, nColumnOffset); + sError.clear(); + return true; + } + + // 第二步:数值字段必须取得NM系列的基础参数定义。 + m_pParameter = _paraHelper->getPara( + m_oFieldInfo.m_sBaseParameterId, s_Nm_Serie); + if (m_pParameter == nullptr) + { + sError = fieldText("Parameter definition not found: %1") + .arg(m_oFieldInfo.m_sBaseParameterId); + return false; + } + + // 第三步:创建原型中的标签、输入框和单位列,不增加字段外框。 + return createNumericEditor(pLayout, nRow, nColumnOffset, sError); +} + +QString nmReservoirParameterField::parameterId() const +{ + return m_oFieldInfo.m_sParameterId; +} + +QString nmReservoirParameterField::baseParameterId() const +{ + return m_oFieldInfo.m_sBaseParameterId; +} + +bool nmReservoirParameterField::isEnum() const +{ + return m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM; +} + +void nmReservoirParameterField::setValueRightAligned(bool bRightAligned) +{ + if (m_pLineEdit != nullptr) + { + m_pLineEdit->setAlignment( + (bRightAligned ? Qt::AlignRight : Qt::AlignLeft) | + Qt::AlignVCenter); + } +} + +int nmReservoirParameterField::editorMinimumWidth() +{ + return 140; +} + +int nmReservoirParameterField::unitMinimumWidth() +{ + return 86; +} + +int nmReservoirParameterField::editorHeight() +{ + return 25; +} + +bool nmReservoirParameterField::createNumericEditor( + QGridLayout* pLayout, + int nRow, + int nColumnOffset, + QString& sError) +{ + QWidget* pParentWidget = pLayout->parentWidget(); + m_pLabel = new QLabel(m_pParameter->m_sAlias, pParentWidget); + m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pLabel->setWordWrap(false); + m_pLabel->setSizePolicy(QSizePolicy::Preferred, + QSizePolicy::Fixed); + + m_pLineEdit = new QLineEdit(pParentWidget); + m_clrNormalText = m_pLineEdit->palette().color(QPalette::Text); + m_pLineEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + m_pLineEdit->setFixedHeight(editorHeight()); + m_pLineEdit->setMinimumWidth(editorMinimumWidth()); + m_pLineEdit->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + + pLayout->addWidget(m_pLabel, nRow, nColumnOffset); + pLayout->addWidget(m_pLineEdit, nRow, nColumnOffset + 1); + + // 有单位参数直接注册到主对话框绑定器;字段只按控件指针读写, + // 因此多口井共用同一基础参数ID时也不会发生串值。 + if (m_oFieldInfo.m_bUnitEnabled && + !m_pParameter->m_sUnit.isEmpty()) + { + m_pUnitComboBox = new QComboBox(pParentWidget); + m_pUnitComboBox->setFixedHeight(editorHeight()); + m_pUnitComboBox->setMinimumWidth(unitMinimumWidth()); + m_pUnitComboBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + pLayout->addWidget(m_pUnitComboBox, nRow, nColumnOffset + 2); + if (m_pUnitService == nullptr || + !m_pUnitService->bindUnitField( + m_pLineEdit, + m_pUnitComboBox, + m_oFieldInfo.m_sBaseParameterId)) + { + sError = fieldText( + "Failed to bind the unit for parameter: %1") + .arg(m_oFieldInfo.m_sBaseParameterId); + return false; + } + } + else + { + // 无单位参数保留空列用于对齐,不显示额外的单位说明文字。 + m_pUnitLabel = new QLabel(pParentWidget); + m_pUnitLabel->setMinimumWidth(unitMinimumWidth()); + m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2); + } + + updateValidationAppearance(true); + sError.clear(); + return true; +} + +void nmReservoirParameterField::createEnumEditor(QGridLayout* pLayout, + int nRow, + int nColumnOffset) +{ + QWidget* pParentWidget = pLayout->parentWidget(); + m_pLabel = new QLabel(m_oFieldInfo.m_sLabel, pParentWidget); + m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pLabel->setWordWrap(false); + m_pLabel->setSizePolicy(QSizePolicy::Preferred, + QSizePolicy::Fixed); + + m_pValueComboBox = new QComboBox(pParentWidget); + m_pValueComboBox->setFixedHeight(editorHeight()); + m_pValueComboBox->setMinimumWidth(editorMinimumWidth()); + m_pValueComboBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + for (int nIndex = 0; + nIndex < m_oFieldInfo.m_listOptions.size(); + ++nIndex) + { + const nmReservoirEnumOption& oOption = + m_oFieldInfo.m_listOptions[nIndex]; + m_pValueComboBox->addItem(oOption.m_sText, oOption.m_sCode); + } + + // 枚举参数没有单位,空白单位列仅用于保持各行编辑器对齐。 + m_pUnitLabel = new QLabel(pParentWidget); + m_pUnitLabel->setMinimumWidth(unitMinimumWidth()); + m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + + pLayout->addWidget(m_pLabel, nRow, nColumnOffset); + pLayout->addWidget(m_pValueComboBox, nRow, nColumnOffset + 1); + pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2); +} + +void nmReservoirParameterField::setBaseValue(const QVariant& oValue) +{ + if (m_pLineEdit == nullptr || !oValue.isValid()) + { + return; + } + + m_bUpdating = true; + double dValue = oValue.toDouble(); + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + m_pUnitService->setUnitBaseValue(m_pLineEdit, dValue); + } + else + { + m_pLineEdit->setText(formatBaseValue(dValue)); + } + m_bUpdating = false; + validate(); +} + +QVariant nmReservoirParameterField::baseValue(bool& bValid) +{ + bValid = validate(); + if (!bValid || m_pLineEdit == nullptr) + { + return QVariant(); + } + + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + return QVariant(m_pUnitService->unitBaseValue(m_pLineEdit)); + } + + bool bNumberOk = false; + double dValue = m_pLineEdit->text().trimmed().toDouble(&bNumberOk); + return bNumberOk ? QVariant(dValue) : QVariant(); +} + +void nmReservoirParameterField::setEnumCode(const QString& sCode) +{ + if (m_pValueComboBox == nullptr) + { + return; + } + int nIndex = m_pValueComboBox->findData(sCode); + m_bUpdating = true; + m_pValueComboBox->setCurrentIndex(nIndex >= 0 ? nIndex : 0); + m_bUpdating = false; +} + +QString nmReservoirParameterField::enumCode() const +{ + if (m_pValueComboBox == nullptr || + m_pValueComboBox->currentIndex() < 0) + { + return QString(); + } + return m_pValueComboBox->itemData( + m_pValueComboBox->currentIndex()).toString(); +} + +void nmReservoirParameterField::setExternalValidationError( + const QString& sError) +{ + m_sExternalValidationError = sError; + validate(); +} + +bool nmReservoirParameterField::validate() +{ + if (!m_bVisible || isEnum()) + { + return true; + } + if (m_pLineEdit == nullptr || m_pParameter == nullptr) + { + return false; + } + + bool bValid = false; + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + bValid = m_pUnitService->isUnitInputValid(m_pLineEdit); + } + else + { + bool bNumberOk = false; + double dValue = m_pLineEdit->text().trimmed() + .toDouble(&bNumberOk); + bValid = bNumberOk && dValue == dValue && + dValue >= m_pParameter->m_dMin && + dValue <= m_pParameter->m_dMax; + if (bValid && + m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER) + { + bValid = dValue == static_cast(dValue); + } + } + bValid = bValid && m_sExternalValidationError.isEmpty(); + updateValidationAppearance(bValid); + return bValid; +} + +void nmReservoirParameterField::setFieldVisible(bool bVisible) +{ + m_bVisible = bVisible; + if (m_pLabel != nullptr) + { + m_pLabel->setVisible(bVisible); + } + if (m_pLineEdit != nullptr) + { + m_pLineEdit->setVisible(bVisible); + } + if (m_pValueComboBox != nullptr) + { + m_pValueComboBox->setVisible(bVisible); + } + if (m_pUnitComboBox != nullptr) + { + m_pUnitComboBox->setVisible(bVisible); + } + if (m_pUnitLabel != nullptr) + { + m_pUnitLabel->setVisible(bVisible); + } +} + +bool nmReservoirParameterField::isFieldVisible() const +{ + return m_bVisible; +} + +QLineEdit* nmReservoirParameterField::valueEditor() const +{ + return m_pLineEdit; +} + +QComboBox* nmReservoirParameterField::enumEditor() const +{ + return m_pValueComboBox; +} + +QString nmReservoirParameterField::formatBaseValue(double dValue) const +{ + if (m_pParameter == nullptr) + { + return QString::number(dValue, 'g', 15); + } + if (m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER || + m_pParameter->m_nDigit == 0) + { + return QString::number(dValue, 'f', 0); + } + if (m_pParameter->m_bScientific) + { + return QString::number(dValue, 'e', m_pParameter->m_nDigit); + } + + QString sValue = QString::number( + dValue, 'f', m_pParameter->m_nDigit); + while (sValue.contains('.') && sValue.endsWith('0')) + { + sValue.chop(1); + } + if (sValue.endsWith('.')) + { + sValue.chop(1); + } + return sValue; +} + +void nmReservoirParameterField::updateValidationAppearance(bool bValid) +{ + if (m_pLineEdit == nullptr || m_pParameter == nullptr) + { + return; + } + + // 只修改文字色,避免Qt 4.8样式表绘制覆盖原生输入框边框。 + QPalette oPalette = m_pLineEdit->palette(); + oPalette.setColor(QPalette::Text, + bValid ? m_clrNormalText : QColor(Qt::red)); + m_pLineEdit->setPalette(oPalette); + + QString sCurrentUnit; + iUnitGroup* pUnitGroup = nullptr; + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + sCurrentUnit = m_pUnitService->currentUnit(m_pLineEdit); + pUnitGroup = m_pUnitService->unitGroup(m_pLineEdit); + } + QString sRange = iParaItemCtrl::getScaleStrOf( + m_pParameter, sCurrentUnit, pUnitGroup); + // 参数别名来自当前语言XML,稳定ID便于定位参数定义。 + QString sHelp = m_pParameter->m_sAlias; + if (!m_pParameter->m_sName.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "[" + m_pParameter->m_sName + "]"; + } + else + { + sHelp = m_pParameter->m_sName; + } + } + if (!sRange.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "\n"; + } + sHelp += sRange; + } + if (!m_sExternalValidationError.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "\n"; + } + sHelp += m_sExternalValidationError; + } + m_pLineEdit->setToolTip(validationToolTip(sHelp, bValid)); + m_pLineEdit->setWhatsThis(sHelp); + if (m_pLabel != nullptr) + { + m_pLabel->setWhatsThis(sHelp); + } +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp new file mode 100644 index 0000000..8f50929 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp @@ -0,0 +1,551 @@ +#include "nmReservoirParameterPage.h" + +#include "nmReservoirParameterField.h" +#include "nmReservoirPropertiesSession.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +nmReservoirParameterPage::nmReservoirParameterPage( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSession* pSession, + nmIReservoirParameterUnitService* pUnitService, + QWidget* pParent) + : QWidget(pParent), + m_eCategory(eCategory), + m_pSession(pSession), + m_pUnitService(pUnitService), + m_nCurrentObjectIndex(-1), + m_bUpdatingObject(false), + m_bBuildingFields(false), + m_pObjectDisplayGroup(nullptr), + m_pObjectLabel(nullptr), + m_pObjectComboBox(nullptr), + m_pGroupsWidget(nullptr), + m_pGroupsLayout(nullptr), + m_pMainLayout(nullptr), + m_pEmptyLabel(nullptr) +{ + createUi(); +} + +nmReservoirParameterPage::~nmReservoirParameterPage() +{ + m_listFields.clear(); + m_mapFields.clear(); + m_mapEditorFields.clear(); + m_pSession = nullptr; + m_pUnitService = nullptr; +} + +void nmReservoirParameterPage::createUi() +{ + // 第一步:创建单行对象显示控制区,储层页自动隐藏该分组。 + m_pMainLayout = new QVBoxLayout(this); + m_pMainLayout->setContentsMargins(8, 6, 8, 8); + m_pMainLayout->setSpacing(8); + + m_pObjectDisplayGroup = new QGroupBox(tr("Object display"), this); + m_pObjectDisplayGroup->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + QHBoxLayout* pObjectLayout = new QHBoxLayout(m_pObjectDisplayGroup); + pObjectLayout->setContentsMargins(8, 15, 8, 8); + pObjectLayout->setSpacing(9); + + m_pObjectLabel = new QLabel(tr("Display:"), m_pObjectDisplayGroup); + m_pObjectLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pObjectComboBox = new QComboBox(m_pObjectDisplayGroup); + m_pObjectComboBox->setMinimumWidth(260); + m_pObjectComboBox->setMaximumWidth(420); + m_pObjectComboBox->setMinimumHeight(27); + pObjectLayout->addStretch(1); + pObjectLayout->addWidget(m_pObjectLabel); + pObjectLayout->addWidget(m_pObjectComboBox); + pObjectLayout->addStretch(1); + m_pMainLayout->addWidget(m_pObjectDisplayGroup); + m_pObjectDisplayGroup->setVisible( + m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR); + + // 第二步:分组载体没有边框,仅用于实现原型中的两列网格。 + m_pGroupsWidget = new QWidget(this); + m_pGroupsLayout = new QGridLayout(m_pGroupsWidget); + m_pGroupsLayout->setContentsMargins(0, 0, 0, 0); + m_pGroupsLayout->setHorizontalSpacing(14); + m_pGroupsLayout->setVerticalSpacing(14); + m_pGroupsLayout->setColumnStretch(0, 1); + m_pGroupsLayout->setColumnStretch(1, 1); + m_pMainLayout->addWidget(m_pGroupsWidget); + m_pMainLayout->addStretch(1); + + connect(m_pObjectComboBox, SIGNAL(currentIndexChanged(int)), + this, SLOT(slotObjectChanged(int))); +} + +bool nmReservoirParameterPage::reloadObjects(QString& sError) +{ + // 第一步:重新取得会话对象描述,并把稳定对象code放入UserRole。 + m_listObjectInfos = m_pSession != nullptr + ? m_pSession->objectInfos(m_eCategory) + : QList(); + m_bUpdatingObject = true; + m_pObjectComboBox->clear(); + for (int nIndex = 0; nIndex < m_listObjectInfos.size(); ++nIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + m_listObjectInfos[nIndex]; + m_pObjectComboBox->addItem(oInfo.m_sDisplayName, + oInfo.m_sObjectCode); + } + m_bUpdatingObject = false; + + bool bShowSelector = m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR; + m_pObjectDisplayGroup->setVisible(bShowSelector); + + // 第二步:构建首个对象;空分类显示无额外面板的空状态。 + return buildObject(m_listObjectInfos.isEmpty() ? -1 : 0, sError); +} + +bool nmReservoirParameterPage::hasEditableObjects() const +{ + return !m_listObjectInfos.isEmpty(); +} + +void nmReservoirParameterPage::slotObjectChanged(int nIndex) +{ + if (m_bUpdatingObject || nIndex == m_nCurrentObjectIndex) + { + return; + } + + // 第一步:离开旧对象前校验并保存,非法输入时回退对象选择。 + int nPreviousIndex = m_nCurrentObjectIndex; + if (nPreviousIndex >= 0 && !commitPendingEdits()) + { + m_bUpdatingObject = true; + m_pObjectComboBox->setCurrentIndex(nPreviousIndex); + m_bUpdatingObject = false; + return; + } + + // 第二步:构建新对象;目录已在初始化阶段验证,正常切换不会失败。 + QString sError; + if (!buildObject(nIndex, sError)) + { + m_bUpdatingObject = true; + m_pObjectComboBox->setCurrentIndex(nPreviousIndex); + m_bUpdatingObject = false; + } +} + +bool nmReservoirParameterPage::buildObject(int nObjectIndex, + QString& sError) +{ + m_bBuildingFields = true; + clearObjectEditors(); + m_nCurrentObjectIndex = nObjectIndex; + + if (nObjectIndex < 0 || nObjectIndex >= m_listObjectInfos.size()) + { + m_pEmptyLabel = new QLabel( + tr("No editable objects in this category."), + m_pGroupsWidget); + m_pEmptyLabel->setAlignment(Qt::AlignCenter); + m_pEmptyLabel->setMinimumHeight(260); + m_pGroupsLayout->addWidget(m_pEmptyLabel, 0, 0, 1, 2); + m_bBuildingFields = false; + sError.clear(); + updateValidity(); + return true; + } + + // 第一步:按目录直接创建分组,页面不再包含对象类型专用布局代码。 + const nmReservoirPropertyObjectInfo& oObjectInfo = + m_listObjectInfos[nObjectIndex]; + for (int nGroupIndex = 0; + nGroupIndex < oObjectInfo.m_listGroups.size(); + ++nGroupIndex) + { + if (!buildGroup(oObjectInfo.m_listGroups[nGroupIndex], sError)) + { + m_bBuildingFields = false; + return false; + } + } + + // 第二步:加载工作副本,随后只调整行可见性,不重建页面。 + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + loadFieldValue(m_listFields[nFieldIndex]); + } + applyVisibilityRules(); + m_bBuildingFields = false; + sError.clear(); + updateValidity(); + return true; +} + +void nmReservoirParameterPage::clearObjectEditors() +{ + m_listFields.clear(); + m_mapFields.clear(); + m_mapEditorFields.clear(); + m_pEmptyLabel = nullptr; + + // 分组载体本身保留,只删除其直接子控件和布局项。 + while (m_pGroupsLayout->count() > 0) + { + QLayoutItem* pItem = m_pGroupsLayout->takeAt(0); + if (pItem->widget() != nullptr) + { + delete pItem->widget(); + } + delete pItem; + } +} + +bool nmReservoirParameterPage::buildGroup( + const nmReservoirParameterGroupInfo& oGroupInfo, + QString& sError) +{ + // 承载器始终横向铺满网格单元;只通过内部弹簧控制垂直位置, + // 避免直接设置对齐标志后分组框退回建议宽度。 + QWidget* pGroupContainer = new QWidget(m_pGroupsWidget); + pGroupContainer->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Expanding); + QVBoxLayout* pGroupContainerLayout = + new QVBoxLayout(pGroupContainer); + pGroupContainerLayout->setContentsMargins(0, 0, 0, 0); + pGroupContainerLayout->setSpacing(0); + + QGroupBox* pGroupBox = new QGroupBox( + oGroupInfo.m_sTitle, pGroupContainer); + // 参数框只在水平方向随页面宽度调整,垂直方向始终采用内容建议高度, + // 避免跨行分组被网格拉伸成大面积空白框。 + pGroupBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + QGridLayout* pFieldLayout = new QGridLayout(pGroupBox); + pFieldLayout->setContentsMargins(8, 15, 8, 10); + pFieldLayout->setHorizontalSpacing(6); + pFieldLayout->setVerticalSpacing(6); + int nFieldColumnOffset = 0; + // 字段较少的通栏分组使用独立的左右弹性列, + // 使参数区域保持居中,输入列仍可随窗口宽度适度伸展。 + if (oGroupInfo.m_bFieldsCentered) + { + nFieldColumnOffset = 1; + pFieldLayout->setColumnStretch(0, 1); + pFieldLayout->setColumnStretch(1, 0); + pFieldLayout->setColumnStretch(2, 1); + pFieldLayout->setColumnStretch(3, 0); + pFieldLayout->setColumnStretch(4, 1); + } + else + { + // 常规分组由最长标签决定标签列宽,数值列和单位列按比例伸展。 + pFieldLayout->setColumnStretch(0, 0); + pFieldLayout->setColumnStretch(1, 8); + pFieldLayout->setColumnStretch(2, 5); + } + pFieldLayout->setColumnMinimumWidth( + nFieldColumnOffset + 1, + nmReservoirParameterField::editorMinimumWidth()); + pFieldLayout->setColumnMinimumWidth( + nFieldColumnOffset + 2, + nmReservoirParameterField::unitMinimumWidth()); + + // 每个字段只把三个直接控件放入此网格,不产生字段外框或子面板。 + for (int nFieldIndex = 0; + nFieldIndex < oGroupInfo.m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + new nmReservoirParameterField( + oGroupInfo.m_listFields[nFieldIndex], + m_pUnitService, + pGroupBox); + if (!pField->initialize(pFieldLayout, + nFieldIndex, + nFieldColumnOffset, + sError)) + { + delete pGroupContainer; + return false; + } + pField->setValueRightAligned( + oGroupInfo.m_bValueRightAligned); + if (pField->valueEditor() != nullptr) + { + connect(pField->valueEditor(), SIGNAL(textChanged(QString)), + this, SLOT(slotFieldValueEdited())); + m_mapEditorFields.insert(pField->valueEditor(), pField); + } + if (pField->enumEditor() != nullptr) + { + connect(pField->enumEditor(), SIGNAL(currentIndexChanged(int)), + this, SLOT(slotEnumIndexChanged(int))); + m_mapEditorFields.insert(pField->enumEditor(), pField); + } + m_listFields.append(pField); + m_mapFields.insert(pField->parameterId(), pField); + } + + // 跨越多行的分组在承载区域垂直居中,普通分组保持顶部排列。 + if (oGroupInfo.m_nRowSpan > 1) + { + pGroupContainerLayout->addStretch(1); + } + pGroupContainerLayout->addWidget(pGroupBox); + pGroupContainerLayout->addStretch(1); + + m_pGroupsLayout->addWidget( + pGroupContainer, + oGroupInfo.m_nRow, + oGroupInfo.m_nColumn, + oGroupInfo.m_nRowSpan, + oGroupInfo.m_nColumnSpan); + return true; +} + +void nmReservoirParameterPage::loadFieldValue( + nmReservoirParameterField* pField) +{ + if (pField == nullptr || m_pSession == nullptr) + { + return; + } + if (pField->isEnum()) + { + pField->setEnumCode(m_pSession->enumCode( + pField->parameterId())); + } + else + { + pField->setBaseValue(m_pSession->value( + pField->parameterId())); + } +} + +bool nmReservoirParameterPage::commitPendingEdits() +{ + if (m_pSession == nullptr) + { + return false; + } + + // 第一步:先完整校验,避免部分字段已写入而后续字段失败。 + if (!isInputValid()) + { + updateValidity(); + return false; + } + + // 第二步:逐行按编辑器指针获取基准值,再统一写入工作副本。 + QMap mapValues; + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + m_listFields[nFieldIndex]; + if (pField == nullptr || pField->isEnum() || + !pField->isFieldVisible()) + { + continue; + } + bool bValid = false; + QVariant oValue = pField->baseValue(bValid); + if (!bValid || !oValue.isValid()) + { + updateValidity(); + return false; + } + mapValues.insert(pField->parameterId(), oValue); + } + m_pSession->setValues(mapValues); + updateValidity(); + return true; +} + +bool nmReservoirParameterPage::isInputValid() +{ + nmReservoirParameterField* pSoiField = + m_mapFields.value("Soi", nullptr); + nmReservoirParameterField* pSwiField = + m_mapFields.value("Swi", nullptr); + if (pSoiField != nullptr) + { + pSoiField->setExternalValidationError(QString()); + } + if (pSwiField != nullptr) + { + pSwiField->setExternalValidationError(QString()); + } + + bool bAllValid = true; + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + m_listFields[nFieldIndex]; + if (pField != nullptr && pField->isFieldVisible() && + !pField->validate()) + { + bAllValid = false; + } + } + + // 油水两相同时显示两个初始饱和度时,两者之和必须为1。 + if (pSoiField != nullptr && pSwiField != nullptr && + pSoiField->isFieldVisible() && + pSwiField->isFieldVisible()) + { + bool bSoiValid = false; + bool bSwiValid = false; + QVariant oSoi = pSoiField->baseValue(bSoiValid); + QVariant oSwi = pSwiField->baseValue(bSwiValid); + const double dTolerance = 1.0e-6; + if (bSoiValid && bSwiValid && + qAbs(oSoi.toDouble() + oSwi.toDouble() - 1.0) > + dTolerance) + { + QString sError = tr( + "Initial oil and water saturations must sum to 1."); + pSoiField->setExternalValidationError(sError); + pSwiField->setExternalValidationError(sError); + bAllValid = false; + } + } + return bAllValid; +} + +void nmReservoirParameterPage::slotFieldValueEdited() +{ + if (!m_bBuildingFields) + { + nmReservoirParameterField* pField = + m_mapEditorFields.value(sender(), nullptr); + if (pField != nullptr) + { + pField->validate(); + } + updateValidity(); + } +} + +void nmReservoirParameterPage::slotEnumIndexChanged(int nIndex) +{ + Q_UNUSED(nIndex); + if (m_bBuildingFields || m_pSession == nullptr) + { + return; + } + + nmReservoirParameterField* pField = + m_mapEditorFields.value(sender(), nullptr); + if (pField == nullptr) + { + return; + } + QString sParameterId = pField->parameterId(); + + // 第一步:联动前保存当前可见数值;非法时回滚枚举code。 + QString sPreviousCode = m_pSession->enumCode(sParameterId); + if (!commitPendingEdits()) + { + m_bBuildingFields = true; + pField->setEnumCode(sPreviousCode); + m_bBuildingFields = false; + return; + } + + // 第二步:只用稳定code更新工作副本,显示文字不参与业务判断。 + if (!m_pSession->setEnumCode(sParameterId, pField->enumCode())) + { + m_bBuildingFields = true; + pField->setEnumCode(sPreviousCode); + m_bBuildingFields = false; + return; + } + + // 第三步:仅显示或隐藏行,隐藏参数继续保留在工作副本中。 + applyVisibilityRules(); + updateValidity(); +} + +void nmReservoirParameterPage::applyVisibilityRules() +{ + if (m_pSession == nullptr || m_nCurrentObjectIndex < 0 || + m_nCurrentObjectIndex >= m_listObjectInfos.size()) + { + return; + } + + const nmReservoirPropertyObjectInfo& oInfo = + m_listObjectInfos[m_nCurrentObjectIndex]; + + // 区域标记为均质储层时隐藏双重介质参数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + QString sModelId = oInfo.m_sObjectCode + + "_RM_ReservoirType"; + bool bDual = m_pSession->enumCode(sModelId) != "homogeneous"; + setFieldVisible(oInfo.m_sObjectCode + "_RM_ComW", bDual); + setFieldVisible(oInfo.m_sObjectCode + "_RM_ComKr", bDual); + setFieldVisible(oInfo.m_sObjectCode + "_RM_NetToGross", bDual); + } + + // 无限导流裂缝不显示有限导流能力和裂缝宽度参数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + QString sModelId = oInfo.m_sObjectCode + "_F_FlowModel"; + bool bFinite = m_pSession->enumCode(sModelId) != + "infinite_conductivity"; + setFieldVisible(oInfo.m_sObjectCode + "_F_FC", bFinite); + setFieldVisible(oInfo.m_sObjectCode + "_F_DW", bFinite); + } + + // 非泄漏断层或复合区不显示泄漏系数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + bool bLeaky = m_pSession->enumCode( + oInfo.m_sObjectCode + "_FT_FlowModel") == "leaky"; + setFieldVisible(oInfo.m_sObjectCode + "_FT_Leakage", bLeaky); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + bool bLeaky = m_pSession->enumCode( + oInfo.m_sObjectCode + "_R_FlowModel") == "leaky"; + setFieldVisible(oInfo.m_sObjectCode + "_R_Leakage", bLeaky); + } +} + +void nmReservoirParameterPage::setFieldVisible( + const QString& sParameterId, + bool bVisible) +{ + nmReservoirParameterField* pField = + m_mapFields.value(sParameterId, nullptr); + if (pField != nullptr) + { + pField->setFieldVisible(bVisible); + } +} + +void nmReservoirParameterPage::updateValidity() +{ + emit sigValidityChanged(isInputValid()); +} + +nmReservoirPropertiesCategory nmReservoirParameterPage::category() const +{ + return m_eCategory; +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp new file mode 100644 index 0000000..0502ac6 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp @@ -0,0 +1,122 @@ +#include "nmReservoirPropertiesDataSource.h" + +#include "nmDataAnalyzeManager.h" +#include "nmDataWellBase.h" +#include "nmWxParameterProperty.h" + +nmReservoirPropertiesSnapshot::nmReservoirPropertiesSnapshot() + : m_nSolverModelType(0) +{ +} + +nmIReservoirPropertiesDataSource::~nmIReservoirPropertiesDataSource() +{ +} + +nmAnalyzeManagerReservoirDataSource::nmAnalyzeManagerReservoirDataSource( + nmDataAnalyzeManager* pDataManager) + : m_pDataManager(pDataManager) +{ +} + +nmAnalyzeManagerReservoirDataSource::~nmAnalyzeManagerReservoirDataSource() +{ + m_pDataManager = nullptr; +} + +bool nmAnalyzeManagerReservoirDataSource::loadSnapshot( + nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const +{ + // 第一步:确认入口已经注入有效的数据管理器。 + if (m_pDataManager == nullptr) + { + sError = QObject::tr("The current numerical well-test data is unavailable."); + return false; + } + + // 第二步:复制求解器模型、储层和几何对象,确保界面编辑不会触碰实时数据。 + oSnapshot.m_nSolverModelType = + static_cast(m_pDataManager->getSolverModelType()); + oSnapshot.m_oReservoir = m_pDataManager->getReservoirDataCopy(); + oSnapshot.m_vecRegionMarks = m_pDataManager->getRegionMarkDataListCopy(); + oSnapshot.m_vecFaults = m_pDataManager->getFaultDataListCopy(); + oSnapshot.m_vecFractures = m_pDataManager->getFractureDataListCopy(); + oSnapshot.m_vecRegions = m_pDataManager->getRegionDataListCopy(); + + oSnapshot.m_vecVerticalWells.clear(); + oSnapshot.m_vecVerticalFracturedWells.clear(); + oSnapshot.m_vecHorizontalFracturedWells.clear(); + + // 第三步:按最具体的井型复制数据,显式排除不受求解器支持的普通水平井。 + QVector vecWells = m_pDataManager->getWellDataList(); + for (int nIndex = 0; nIndex < vecWells.size(); ++nIndex) + { + nmDataWellBase* pWell = vecWells[nIndex]; + if (pWell == nullptr) + { + continue; + } + + nmDataVerticalFracturedWell* pVerticalFractured = + dynamic_cast(pWell); + nmDataHorizontalFracturedWell* pHorizontalFractured = + dynamic_cast(pWell); + nmDataVerticalWell* pVertical = dynamic_cast(pWell); + + if (pVerticalFractured != nullptr) + { + oSnapshot.m_vecVerticalFracturedWells.append(*pVerticalFractured); + } + else if (pHorizontalFractured != nullptr) + { + oSnapshot.m_vecHorizontalFracturedWells.append(*pHorizontalFractured); + } + else if (pVertical != nullptr) + { + oSnapshot.m_vecVerticalWells.append(*pVertical); + } + } + + sError.clear(); + return true; +} + +bool nmAnalyzeManagerReservoirDataSource::commitSnapshot( + const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError) +{ + // 第一步:提交前再次校验数据管理器生命周期。 + if (m_pDataManager == nullptr) + { + sError = QObject::tr("The current numerical well-test data is unavailable."); + return false; + } + + // 第二步:按对象类型批量替换现有数据,不改变对象地址和列表结构。 + m_pDataManager->updateVerticalWells(oSnapshot.m_vecVerticalWells); + m_pDataManager->updateVerticalFracturedWells(oSnapshot.m_vecVerticalFracturedWells); + m_pDataManager->updateHorizontalFracturedWells(oSnapshot.m_vecHorizontalFracturedWells); + m_pDataManager->updateFaultData(oSnapshot.m_vecFaults); + m_pDataManager->updateFractureData(oSnapshot.m_vecFractures); + m_pDataManager->updateRegionData(oSnapshot.m_vecRegions); + m_pDataManager->updateRegionMarkData(oSnapshot.m_vecRegionMarks); + m_pDataManager->updateReservoirData(oSnapshot.m_oReservoir); + + // 第三步:重建实时注册表映射,并在几何变化时统一通知画布和网格。 + m_pDataManager->syncWellAttrs(); + m_pDataManager->syncGeometryAttrs(); + if (bGeometryChanged) + { + m_pDataManager->notifyDataChanged(); + m_pDataManager->updateWellPlotByDataManager(); + } + + // 第四步:兼容仍在使用旧参数树的窗口,提交完成后只刷新一次表格入口。 + nmWxParameterProperty::notifyUpdateTable(); + + sError.clear(); + return true; +} + diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp new file mode 100644 index 0000000..293b74c --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp @@ -0,0 +1,242 @@ +#include "nmReservoirPropertiesSession.h" + +#include "nmAttrRegistry.h" +#include "nmDataAttribute.h" + +namespace +{ + +/** @brief 比较两个QVariant数值,保留字符串和整数的精确语义。 */ +bool sameValue(const QVariant& oLeft, const QVariant& oRight) +{ + return oLeft == oRight; +} + +/** @brief 比较两口井的网格相关参数。 */ +bool sameWellGeometry(nmDataWellBase& oLeft, nmDataWellBase& oRight) +{ + return sameValue(oLeft.getX().getValue(), oRight.getX().getValue()) && + sameValue(oLeft.getY().getValue(), oRight.getY().getValue()) && + sameValue(oLeft.getRadius().getValue(), oRight.getRadius().getValue()); +} + +} + +nmReservoirPropertiesSession::nmReservoirPropertiesSession( + nmIReservoirPropertiesDataSource* pDataSource) + : m_pDataSource(pDataSource), + m_pAttrRegistry(new nmAttrRegistry), + m_bInitialized(false) +{ +} + +nmReservoirPropertiesSession::~nmReservoirPropertiesSession() +{ + delete m_pAttrRegistry; + m_pAttrRegistry = nullptr; + m_pDataSource = nullptr; +} + +bool nmReservoirPropertiesSession::initialize(QString& sError) +{ + // 第一步:读取一次真实数据,作为取消和变更检测的基线。 + if (m_pDataSource == nullptr || + !m_pDataSource->loadSnapshot(m_oOriginalSnapshot, sError)) + { + m_bInitialized = false; + return false; + } + + // 第二步:复制出独立工作副本,后续界面修改只写入此对象。 + m_oWorkingSnapshot = m_oOriginalSnapshot; + nmReservoirParameterCatalog::registerSnapshot(m_pAttrRegistry, + m_oWorkingSnapshot); + m_bInitialized = true; + sError.clear(); + return true; +} + +QList nmReservoirPropertiesSession::objectInfos( + nmReservoirPropertiesCategory eCategory) +{ + if (!m_bInitialized) + { + return QList(); + } + return nmReservoirParameterCatalog::createObjectInfos(eCategory, + m_oWorkingSnapshot); +} + +QVariant nmReservoirPropertiesSession::value(const QString& sParameterId) const +{ + if (!m_bInitialized || m_pAttrRegistry == nullptr) + { + return QVariant(); + } + QStringList listIds; + listIds << sParameterId; + return m_pAttrRegistry->collect(listIds).value(sParameterId, QVariant()); +} + +bool nmReservoirPropertiesSession::setValue(const QString& sParameterId, + const QVariant& oValue) +{ + if (!m_bInitialized || m_pAttrRegistry == nullptr || + !m_pAttrRegistry->registeredNames().contains(sParameterId)) + { + return false; + } + m_pAttrRegistry->setValue(sParameterId, oValue); + return true; +} + +void nmReservoirPropertiesSession::setValues( + const QMap& mapValues) +{ + QMap::const_iterator oIterator = mapValues.constBegin(); + for (; oIterator != mapValues.constEnd(); ++oIterator) + { + setValue(oIterator.key(), oIterator.value()); + } +} + +QString nmReservoirPropertiesSession::enumCode(const QString& sParameterId) const +{ + if (!m_bInitialized) + { + return QString(); + } + return nmReservoirParameterCatalog::enumCode(m_oWorkingSnapshot, + sParameterId); +} + +bool nmReservoirPropertiesSession::setEnumCode(const QString& sParameterId, + const QString& sCode) +{ + if (!m_bInitialized) + { + return false; + } + return nmReservoirParameterCatalog::setEnumCode(m_oWorkingSnapshot, + sParameterId, + sCode); +} + +bool nmReservoirPropertiesSession::commit(QString& sError) +{ + if (!m_bInitialized || m_pDataSource == nullptr) + { + sError = QObject::tr("The reservoir properties editing session is unavailable."); + return false; + } + + // 第一步:在提交前计算几何变更,供数据源决定是否重建网格和刷新画布。 + bool bGeometryChanged = isGeometryChanged(); + + // 第二步:将完整工作副本一次性交给数据源;失败时继续保留当前编辑内容。 + if (!m_pDataSource->commitSnapshot(m_oWorkingSnapshot, + bGeometryChanged, + sError)) + { + return false; + } + + // 第三步:提交成功后更新基线,防止同一会话重复识别旧变更。 + m_oOriginalSnapshot = m_oWorkingSnapshot; + sError.clear(); + return true; +} + +const nmReservoirPropertiesSnapshot& +nmReservoirPropertiesSession::workingSnapshot() const +{ + return m_oWorkingSnapshot; +} + +bool nmReservoirPropertiesSession::isGeometryChanged() const +{ + // 第一步:对象数量变化视为几何变化,虽然当前对话框本身不提供增删操作。 + if (m_oOriginalSnapshot.m_vecVerticalWells.size() != + m_oWorkingSnapshot.m_vecVerticalWells.size() || + m_oOriginalSnapshot.m_vecVerticalFracturedWells.size() != + m_oWorkingSnapshot.m_vecVerticalFracturedWells.size() || + m_oOriginalSnapshot.m_vecHorizontalFracturedWells.size() != + m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size()) + { + return true; + } + + // 第二步:比较三类井的位置和井径。 + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalWells.size(); ++nIndex) + { + nmDataVerticalWell& oOriginal = + const_cast(m_oOriginalSnapshot.m_vecVerticalWells[nIndex]); + nmDataVerticalWell& oWorking = + const_cast(m_oWorkingSnapshot.m_vecVerticalWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking)) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalFracturedWells.size(); ++nIndex) + { + nmDataVerticalFracturedWell& oOriginal = const_cast( + m_oOriginalSnapshot.m_vecVerticalFracturedWells[nIndex]); + nmDataVerticalFracturedWell& oWorking = const_cast( + m_oWorkingSnapshot.m_vecVerticalFracturedWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking) || + !sameValue(oOriginal.getFractureHalfLength().getValue(), + oWorking.getFractureHalfLength().getValue()) || + !sameValue(oOriginal.getFractureAngle().getValue(), + oWorking.getFractureAngle().getValue())) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size(); ++nIndex) + { + nmDataHorizontalFracturedWell& oOriginal = + const_cast( + m_oOriginalSnapshot.m_vecHorizontalFracturedWells[nIndex]); + nmDataHorizontalFracturedWell& oWorking = + const_cast( + m_oWorkingSnapshot.m_vecHorizontalFracturedWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking) || + !sameValue(oOriginal.getWellLength().getValue(), oWorking.getWellLength().getValue()) || + !sameValue(oOriginal.getDrainAngle().getValue(), oWorking.getDrainAngle().getValue()) || + !sameValue(oOriginal.getNumberOfFractures().getValue(), + oWorking.getNumberOfFractures().getValue()) || + !sameValue(oOriginal.getFractureHalfLength().getValue(), + oWorking.getFractureHalfLength().getValue()) || + !sameValue(oOriginal.getFractureAngle().getValue(), + oWorking.getFractureAngle().getValue())) + { + return true; + } + } + + // 第三步:断层和裂缝端点也直接参与网格,因此比较完整点坐标。 + if (m_oOriginalSnapshot.m_vecFaults.size() != m_oWorkingSnapshot.m_vecFaults.size() || + m_oOriginalSnapshot.m_vecFractures.size() != m_oWorkingSnapshot.m_vecFractures.size()) + { + return true; + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFaults.size(); ++nIndex) + { + if (m_oOriginalSnapshot.m_vecFaults[nIndex].getFaultPoints() != + m_oWorkingSnapshot.m_vecFaults[nIndex].getFaultPoints()) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFractures.size(); ++nIndex) + { + if (m_oOriginalSnapshot.m_vecFractures[nIndex].getFracturePoints() != + m_oWorkingSnapshot.m_vecFractures[nIndex].getFracturePoints()) + { + return true; + } + } + return false; +} + diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp index 6bd7312..0a11b33 100644 --- a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp +++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp @@ -747,7 +747,7 @@ void nmWxAutomaticFitting::setupParameterTable() m_parameterTable->setItem(0, 2, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMin().getValue().toDouble()))); m_parameterTable->setItem(0, 3, new QTableWidgetItem(QString::number(reservoirData.getPermeability().getValue().toDouble()))); m_parameterTable->setItem(0, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMax().getValue().toDouble()))); - m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("Darcy"))); + m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("mD"))); // 表皮系数 (Skin) m_parameterTable->setItem(1, 0, new QTableWidgetItem("2")); diff --git a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp index 7c8ccf2..494016d 100644 --- a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp @@ -1,4 +1,4 @@ -#include "nmWxPropertyInterpolationDlg.h" +#include "nmWxPropertyInterpolationDlg.h" #include #include @@ -47,9 +47,9 @@ namespace // 表格第0行保留给单位,实际测点从第1行开始. const int POINT_UNIT_ROW = 0; const int FIRST_POINT_ROW = 1; -// 坐标和厚度以m保存,渗透率以D保存但默认使用mD显示. +// 坐标和厚度以m保存,渗透率统一以mD保存和显示。 const char* LENGTH_BASE_UNIT = "m"; -const char* PERMEABILITY_BASE_UNIT = "D"; +const char* PERMEABILITY_BASE_UNIT = "mD"; const char* PERMEABILITY_DISPLAY_UNIT = "mD"; // 使用独立翻译上下文,便于统一维护对话框文本. @@ -92,9 +92,7 @@ QString defaultPropertyDisplayUnit(const QString& property) QString unitGroupLookupUnit(const QString& unit) { - // D与时间单位d仅大小写不同,使用唯一的mD定位渗透率单位组. - return unit == PERMEABILITY_BASE_UNIT ? - QString(PERMEABILITY_DISPLAY_UNIT) : unit; + return unit; } bool convertUnitValue(double sourceValue, diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp new file mode 100644 index 0000000..fe0bd13 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp @@ -0,0 +1,504 @@ +#include "nmWxReservoirPropertiesEditor.h" + +#include "nmReservoirPropertiesDataSource.h" +#include "nmReservoirPropertiesSession.h" +#include "nmReservoirParameterPage.h" +#include "iUnitGroup.h" +#include "iUnitWxBinder.h" +#include "mModuleDefines.h" +#include "ZxBaseUtil.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +nmWxReservoirPropertiesEditor::nmWxReservoirPropertiesEditor( + nmIReservoirPropertiesDataSource* pDataSource, + QWidget* pParent) + : iDlgBase(pParent), + m_pDataSource(pDataSource), + m_pSession(new nmReservoirPropertiesSession(pDataSource)), + m_pCategoryButtonGroup(nullptr), + m_pStackedWidget(nullptr), + m_pButtonBox(nullptr), + m_pFooterHelpButton(nullptr), + m_pStatusLabel(nullptr), + m_nCurrentCategory(NM_RESERVOIR_PAGE_RESERVOIR), + m_bInitialized(false) +{ + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + m_pPages[nIndex] = nullptr; + } + + // 单位绑定器必须先切换到数值试井参数系列,再创建任何参数字段。 + setParaSrcTag(s_Nm_Serie); + createUi(); + setWindowTitle(tr("Reservoir properties settings")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + // 首次打开使用建议尺寸,后续最小宽高均由页面内容和布局自动决定。 + resize(880, 480); +} + +nmWxReservoirPropertiesEditor::~nmWxReservoirPropertiesEditor() +{ + delete m_pSession; + m_pSession = nullptr; + m_pDataSource = nullptr; +} + +void nmWxReservoirPropertiesEditor::createUi() +{ + // 第一步:创建原型中的顶部ribbon和无边框页面堆栈。 + QVBoxLayout* pMainLayout = new QVBoxLayout(this); + pMainLayout->setContentsMargins(12, 10, 12, 0); + pMainLayout->setSpacing(0); + pMainLayout->addWidget(createCategoryBar()); + + m_pStackedWidget = new QStackedWidget(this); + pMainLayout->addWidget(m_pStackedWidget, 1); + + // 第二步:底部左侧放帮助与状态,右侧只放确定和取消。 + QWidget* pFooterWidget = new QWidget(this); + QHBoxLayout* pFooterLayout = new QHBoxLayout(pFooterWidget); + pFooterLayout->setContentsMargins(4, 5, 4, 5); + pFooterLayout->setSpacing(8); + + m_pFooterHelpButton = new QToolButton(pFooterWidget); + m_pFooterHelpButton->setText(tr("Help")); + m_pFooterHelpButton->setIcon(zxLoadIcon("Help")); + m_pFooterHelpButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + m_pFooterHelpButton->setAutoRaise(true); + pFooterLayout->addWidget(m_pFooterHelpButton); + + m_pStatusLabel = new QLabel(pFooterWidget); + m_pStatusLabel->setWordWrap(true); + pFooterLayout->addWidget(m_pStatusLabel, 1); + + m_pButtonBox = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + Qt::Horizontal, + pFooterWidget); + QPushButton* pOkButton = m_pButtonBox->button(QDialogButtonBox::Ok); + QPushButton* pCancelButton = + m_pButtonBox->button(QDialogButtonBox::Cancel); + if (pOkButton != nullptr) + { + pOkButton->setIcon(zxLoadIcon("OK")); + pOkButton->setText(tr("OK")); + } + if (pCancelButton != nullptr) + { + pCancelButton->setIcon(zxLoadIcon("Cancel")); + pCancelButton->setText(tr("Cancel")); + } + pFooterLayout->addWidget(m_pButtonBox); + pMainLayout->addWidget(pFooterWidget); + + connect(m_pButtonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(reject())); + connect(m_pFooterHelpButton, SIGNAL(clicked()), + this, SLOT(slotHelp())); +} + +QWidget* nmWxReservoirPropertiesEditor::createCategoryBar() +{ + // 使用无标题分组框承载顶部导航,获得与框架工具栏相近的浅色外边框。 + QGroupBox* pCategoryBar = new QGroupBox(this); + + // 为边框和内部命令区保留少量间距,窗口拉伸时右侧空白自然扩展。 + QHBoxLayout* pBarLayout = new QHBoxLayout(pCategoryBar); + pBarLayout->setContentsMargins(3, 3, 3, 3); + pBarLayout->setSpacing(0); + + m_pCategoryButtonGroup = new QButtonGroup(this); + + // 第一步:基础组只包含储层参数。 + QHBoxLayout* pBasicLayout = nullptr; + QWidget* pBasicGroup = createRibbonGroup( + tr("Basic"), pCategoryBar, pBasicLayout); + pBasicLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_RESERVOIR, + tr("Reservoir parameters"), + "ResData", + pBasicGroup)); + pBarLayout->addWidget(pBasicGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第二步:井筒参数独立成组,避免与储层内部区域对象混在一起。 + QHBoxLayout* pWellLayout = nullptr; + QWidget* pWellGroup = createRibbonGroup( + tr("Wells"), pCategoryBar, pWellLayout); + pWellLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_WELL, + tr("Well parameters"), + "NmWell", + pWellGroup)); + pBarLayout->addWidget(pWellGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第三步:四类储层平面对象按用户工作顺序放入同一个几何对象组。 + QHBoxLayout* pGeometryLayout = nullptr; + QWidget* pGeometryGroup = createRibbonGroup( + tr("Geometry objects"), + pCategoryBar, + pGeometryLayout); + pGeometryLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_FAULT, + tr("Faults"), + "NmFault", + pGeometryGroup)); + pGeometryLayout->insertWidget(1, createCategoryButton( + NM_RESERVOIR_PAGE_FRACTURE, + tr("Fractures"), + "NmFault", + pGeometryGroup)); + pGeometryLayout->insertWidget(2, createCategoryButton( + NM_RESERVOIR_PAGE_COMPOSITE_REGION, + tr("Composite regions"), + "NmRegion", + pGeometryGroup)); + pGeometryLayout->insertWidget(3, createCategoryButton( + NM_RESERVOIR_PAGE_REGION_MARK, + tr("Region marks"), + "RegionSelect", + pGeometryGroup)); + pBarLayout->addWidget(pGeometryGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第四步:帮助是即时命令,不加入互斥页面按钮组。 + QHBoxLayout* pHelpLayout = nullptr; + QWidget* pHelpGroup = createRibbonGroup( + tr("Help"), pCategoryBar, pHelpLayout); + pHelpLayout->insertWidget(0, createHelpButton(pHelpGroup)); + pBarLayout->addWidget(pHelpGroup); + pBarLayout->addStretch(1); + + connect(m_pCategoryButtonGroup, SIGNAL(buttonClicked(int)), + this, SLOT(slotCategoryButtonClicked(int))); + return pCategoryBar; +} + +QWidget* nmWxReservoirPropertiesEditor::createRibbonGroup( + const QString& sCaption, + QWidget* pParent, + QHBoxLayout*& pCommandLayout) +{ + QWidget* pGroupWidget = new QWidget(pParent); + + // 分组左右保留稳定留白,使按钮不会紧贴相邻分组的竖向分隔线。 + QVBoxLayout* pGroupLayout = new QVBoxLayout(pGroupWidget); + pGroupLayout->setContentsMargins(11, 2, 11, 1); + // 按钮区与下方分组标题之间留出间距,避免两行文字贴得过近。 + pGroupLayout->setSpacing(4); + QWidget* pCommandWidget = new QWidget(pGroupWidget); + pCommandLayout = new QHBoxLayout(pCommandWidget); + pCommandLayout->setContentsMargins(0, 0, 0, 0); + pCommandLayout->setSpacing(6); + pCommandLayout->addStretch(); + pGroupLayout->addWidget(pCommandWidget, 1); + + // 分组标题使用主题灰色和下划线,保持框架参考工具栏的层级表现。 + QLabel* pCaptionLabel = new QLabel(sCaption, pGroupWidget); + pCaptionLabel->setAlignment(Qt::AlignCenter); + pCaptionLabel->setFixedHeight(16); + QFont oCaptionFont = pCaptionLabel->font(); + oCaptionFont.setUnderline(true); + pCaptionLabel->setFont(oCaptionFont); + QPalette oCaptionPalette = pCaptionLabel->palette(); + oCaptionPalette.setColor( + QPalette::WindowText, + pGroupWidget->palette().color(QPalette::Mid)); + pCaptionLabel->setPalette(oCaptionPalette); + pGroupLayout->addWidget(pCaptionLabel); + return pGroupWidget; +} + +QFrame* nmWxReservoirPropertiesEditor::createRibbonSeparator( + QWidget* pParent) +{ + // 使用单像素平直竖线,避免Sunken双线在端点形成视觉折角。 + QFrame* pSeparator = new QFrame(pParent); + pSeparator->setFrameShape(QFrame::VLine); + pSeparator->setFrameShadow(QFrame::Plain); + pSeparator->setLineWidth(1); + QPalette oSeparatorPalette = pSeparator->palette(); + oSeparatorPalette.setColor( + QPalette::WindowText, + pParent->palette().color(QPalette::Mid)); + pSeparator->setPalette(oSeparatorPalette); + pSeparator->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + return pSeparator; +} + +QToolButton* nmWxReservoirPropertiesEditor::createCategoryButton( + nmReservoirPropertiesCategory eCategory, + const QString& sText, + const QString& sIconName, + QWidget* pParent) +{ + QToolButton* pButton = new QToolButton(pParent); + pButton->setText(sText); + pButton->setIcon(zxLoadIcon(sIconName)); + pButton->setIconSize(QSize(25, 25)); + pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + // 分类按钮仅执行页面切换命令,不保留持续选中状态。 + pButton->setCheckable(false); + pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + m_pCategoryButtonGroup->addButton( + pButton, static_cast(eCategory)); + return pButton; +} + +QToolButton* nmWxReservoirPropertiesEditor::createHelpButton( + QWidget* pParent) +{ + QToolButton* pButton = new QToolButton(pParent); + pButton->setText(tr("Help")); + pButton->setIcon(zxLoadIcon("Help")); + pButton->setIconSize(QSize(25, 25)); + pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + connect(pButton, SIGNAL(clicked()), this, SLOT(slotHelp())); + return pButton; +} + +bool nmWxReservoirPropertiesEditor::initialize(QString& sError) +{ + // 第一步:建立工作副本,失败时不创建不完整的字段控件。 + if (m_pSession == nullptr || !m_pSession->initialize(sError)) + { + m_bInitialized = false; + return false; + } + + // 第二步:创建页面并逐页验证XML参数定义和单位绑定。 + createPages(); + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (!m_pPages[nIndex]->reloadObjects(sError)) + { + m_bInitialized = false; + return false; + } + } + + // 第三步:没有对应对象的分类直接禁用,避免用户进入无操作价值的空页面。 + updateCategoryButtonStates(); + m_pStackedWidget->setCurrentIndex(NM_RESERVOIR_PAGE_RESERVOIR); + m_bInitialized = true; + validateAllPages(); + sError.clear(); + return true; +} + +bool nmWxReservoirPropertiesEditor::bindUnitField( + QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId) +{ + // 参数XML已统一使用无歧义的mD作为渗透率基准单位,所有字段直接复用框架绑定器。 + return bindUnitPairWxs(pLineEdit, pUnitComboBox, + sBaseParameterId, false); +} + +void nmWxReservoirPropertiesEditor::setUnitBaseValue( + QLineEdit* pLineEdit, + double dBaseValue) +{ + if (m_pUnitBinder != nullptr) + { + m_pUnitBinder->setBaseValue(pLineEdit, dBaseValue); + } +} + +double nmWxReservoirPropertiesEditor::unitBaseValue( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getBaseValue(pLineEdit) : 0.0; +} + +bool nmWxReservoirPropertiesEditor::isUnitInputValid( + QLineEdit* pLineEdit) +{ + return m_pUnitBinder != nullptr && + m_pUnitBinder->isInputOK(pLineEdit, true, nullptr); +} + +QString nmWxReservoirPropertiesEditor::currentUnit( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getCurrentUnit(pLineEdit) : QString(); +} + +iUnitGroup* nmWxReservoirPropertiesEditor::unitGroup( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getUnitGroup(pLineEdit) : nullptr; +} + +void nmWxReservoirPropertiesEditor::createPages() +{ + if (m_pStackedWidget->count() > 0) + { + return; + } + + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + nmReservoirPropertiesCategory eCategory = + static_cast(nIndex); + m_pPages[nIndex] = new nmReservoirParameterPage( + eCategory, + m_pSession, + this, + m_pStackedWidget); + connect(m_pPages[nIndex], SIGNAL(sigValidityChanged(bool)), + this, SLOT(slotPageValidityChanged(bool))); + m_pStackedWidget->addWidget(m_pPages[nIndex]); + } +} + +void nmWxReservoirPropertiesEditor::slotCategoryButtonClicked( + int nCategory) +{ + if (!m_bInitialized || nCategory < 0 || + nCategory >= NM_RESERVOIR_PAGE_COUNT) + { + return; + } + + // 分类按钮状态由对象列表决定;此处再次防御程序主动触发的非法切换。 + QAbstractButton* pCategoryButton = m_pCategoryButtonGroup != nullptr + ? m_pCategoryButtonGroup->button(nCategory) : nullptr; + if (pCategoryButton == nullptr || !pCategoryButton->isEnabled()) + { + return; + } + + // 离开当前分类前先校验并保存,非法时保持当前页。 + if (m_pPages[m_nCurrentCategory] != nullptr && + !m_pPages[m_nCurrentCategory]->commitPendingEdits()) + { + m_pStatusLabel->setText( + tr("Please correct the invalid parameter values.")); + return; + } + + m_nCurrentCategory = nCategory; + m_pStackedWidget->setCurrentIndex(nCategory); + m_pStatusLabel->clear(); +} + +void nmWxReservoirPropertiesEditor::updateCategoryButtonStates() +{ + if (m_pCategoryButtonGroup == nullptr) + { + return; + } + + // 逐类读取页面已经加载的对象列表,页面不存在或对象为空时禁用命令。 + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + QAbstractButton* pCategoryButton = + m_pCategoryButtonGroup->button(nIndex); + bool bEnabled = m_pPages[nIndex] != nullptr && + m_pPages[nIndex]->hasEditableObjects(); + if (pCategoryButton != nullptr) + { + pCategoryButton->setEnabled(bEnabled); + } + } +} + +void nmWxReservoirPropertiesEditor::slotPageValidityChanged(bool bValid) +{ + Q_UNUSED(bValid); + validateAllPages(); +} + +void nmWxReservoirPropertiesEditor::slotHelp() +{ + // 顶部和底部帮助命令统一打开系统帮助文档。 + ZxBaseUtil::startHelp(); +} + +bool nmWxReservoirPropertiesEditor::validateAllPages() +{ + bool bAllValid = m_bInitialized; + if (m_bInitialized) + { + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (m_pPages[nIndex] != nullptr && + !m_pPages[nIndex]->isInputValid()) + { + bAllValid = false; + break; + } + } + } + + QPushButton* pOkButton = m_pButtonBox != nullptr + ? m_pButtonBox->button(QDialogButtonBox::Ok) : nullptr; + if (pOkButton != nullptr) + { + pOkButton->setEnabled(bAllValid); + } + return bAllValid; +} + +void nmWxReservoirPropertiesEditor::accept() +{ + if (!m_bInitialized) + { + return; + } + + // 第一步:依次提交各页面当前对象尚未离开焦点的输入。 + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (m_pPages[nIndex] != nullptr && + !m_pPages[nIndex]->commitPendingEdits()) + { + m_nCurrentCategory = nIndex; + m_pStackedWidget->setCurrentIndex(nIndex); + m_pStatusLabel->setText( + tr("Please correct the invalid parameter values.")); + validateAllPages(); + return; + } + } + + // 第二步:把完整工作副本一次性交给数据源。 + QString sError; + if (!m_pSession->commit(sError)) + { + m_pStatusLabel->setText(sError); + QMessageBox::warning(this, tr("Reservoir properties"), sError); + return; + } + + // 第三步:仅在提交成功后关闭对话框。 + iDlgBase::accept(); +} + +void nmWxReservoirPropertiesEditor::reject() +{ + // 工作副本从未提前写入真实数据,取消时直接关闭即可。 + iDlgBase::reject(); +} diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.pro b/Src4/nmNum/nmSubWxs/nmSubWxs.pro index 370bf5b..74d2e04 100644 --- a/Src4/nmNum/nmSubWxs/nmSubWxs.pro +++ b/Src4/nmNum/nmSubWxs/nmSubWxs.pro @@ -1,4 +1,6 @@ -QT += core sql gui widgets +QT += core sql gui + +greaterThan(QT_MAJOR_VERSION, 4) : QT += widgets greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport #greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport