LS0gUkFOQVAtSUVzLmFzbgotLQotLSAzR1BQIFRTIDI1LjQxMyBWMTQuMC4wICgyMDE3LTAzKQotLSBodHRwOi8vd3d3LjNncHAub3JnL2Z0cC9TcGVjcy9odG1sLWluZm8vMjU0MTMuaHRtCi0tCi0tIDkuMy40CUluZm9ybWF0aW9uIEVsZW1lbnQgRGVmaW5pdGlvbnMKLS0KCi0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tCi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgRGVmaW5pdGlvbnMKLS0KLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClJBTkFQLUlFcyB7Cml0dS10ICgwKSBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQp1bXRzLUFjY2VzcyAoMjApIG1vZHVsZXMgKDMpIHJhbmFwICgwKSB2ZXJzaW9uMSAoMSkgcmFuYXAtSUVzICgyKSB9CgpERUZJTklUSU9OUyBBVVRPTUFUSUMgVEFHUyA6Oj0KCkJFR0lOCgpJTVBPUlRTCgltYXhOck9mQ1NHcywKCW1heE5yT2ZFcnJvcnMsCgltYXhOck9mUERQRGlyZWN0aW9ucywKCW1heE5yT2ZQb2ludHMsCgltYXhOck9mUkFCcywKCW1heE5yT2ZTUkJzLAoJbWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMsCgltYXhSQUItU3ViZmxvd3MsCgltYXhSQUItU3ViZmxvd0NvbWJpbmF0aW9uLAoJbWF4TnJPZkxldmVscywKCW1heE5yT2ZBbHRWYWx1ZXMsCgltYXhOck9mU05BcywKCW1heE5yT2ZMQXMsCgltYXhOck9mUExNTnNTTiwKCW1heFNldCwKCW1heE5yT2ZIU0RTQ0hNQUNkRmxvd3MtMSwKCW1heE5yT2ZVRXNUb0JlVHJhY2VkLAoJbWF4TnJPZkludGVyZmFjZXMsCgltYXhub29mTXVsdGljYXN0U2VydmljZXNQZXJSTkMsCgltYXhNQk1TU0EsCgltYXhNQk1TUkEsCgltYXhub29mTXVsdGljYXN0U2VydmljZXNQZXJVRSwKCW1heE5yT2ZFRENITUFDZEZsb3dzLTEsCgltYXhHQU5TU1NldCwKCW1heE5yT2ZFVVRSQUZyZXFzLAoJbWF4TnJPZkNlbGxJZHMsCgltYXhOck9mUkFJcywKCW1heE5yT2ZMQUlzLAoJbWF4TnJPZlZvbCwKCW1heFNpemVPZklNU0luZm8sCgltYXhub29mTURUUExNTnMsCgltYXhBZGRQb3NTZXQsCgltYXhub29mUExNTnMsCgoJaWQtQ04tRG9tYWluSW5kaWNhdG9yLAoJaWQtTWVzc2FnZVN0cnVjdHVyZSwKCWlkLVNSQi1UckNILU1hcHBpbmcsCglpZC1UeXBlT2ZFcnJvciwKCWlkLWhTLURTQ0gtTUFDLWQtRmxvdy1JRCwKCWlkLVNpZ25hbGxpbmdJbmRpY2F0aW9uLAoJaWQtQ2VsbExvYWRJbmZvcm1hdGlvbkdyb3VwLAoJaWQtVHJhY2VSZWNvcmRpbmdTZXNzaW9uSW5mb3JtYXRpb24sCglpZC1NQk1TTGlua2luZ0luZm9ybWF0aW9uLAoJaWQtQWx0ZXJuYXRpdmVSQUJDb25maWd1cmF0aW9uLAoJaWQtQWx0ZXJuYXRpdmVSQUJDb25maWd1cmF0aW9uUmVxdWVzdCwKCWlkLUUtRENILU1BQy1kLUZsb3ctSUQsCglpZC1SQUMsCglpZC1BbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mLAoJaWQtQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlSW5mLAoJaWQtQXNzLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QsCglpZC1Bc3MtUkFCLVBhcmFtZXRlci1FeHRlbmRlZE1heEJpdHJhdGVMaXN0LAoJaWQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlTGlzdCwKCWlkLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdCwKCWlkLVJlcXVlc3RlZC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkTWF4Qml0cmF0ZUxpc3QsCglpZC1SZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlTGlzdCwKCWlkLUxBb2ZJZGxlTW9kZVVFcywKCWlkLW5ld0xBTGlzdG9mSWRsZU1vZGVVRXMsCglpZC1MQUxpc3R3aXRoTm9JZGxlTW9kZVVFc0FueU1vcmUsCglpZC1FeHRlbmRlZFJOQy1JRCwKCWlkLUdBTlNTLVBvc2l0aW9uaW5nRGF0YVNldCwKCWlkLWQtUk5USS1mb3ItTm9JdUNTVVAsCglpZC1VRS1IaXN0b3J5LUluZm9ybWF0aW9uLAoJaWQtU3Vic2NyaWJlclByb2ZpbGVJRGZvclJGUCwKCWlkLUFsdC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mLAoJaWQtQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkTWF4Qml0cmF0ZUluZiwKCWlkLUFzcy1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZEd1YXJhbnRlZWRCaXRyYXRlTGlzdCwKCWlkLUFzcy1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZE1heEJpdHJhdGVMaXN0LAoJaWQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QsCglpZC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZE1heEJpdHJhdGVMaXN0LAoJaWQtUmVxdWVzdGVkLVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkTWF4Qml0cmF0ZUxpc3QsCglpZC1SZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QsCglpZC1QU1JBQnRvYmVSZXBsYWNlZCwKCWlkLVNSVkNDLUluZm9ybWF0aW9uLAoJaWQtQ1NHLUlkLAoJaWQtQ1NGQi1JbmZvcm1hdGlvbiwKCWlkLUlSQVQtTWVhc3VyZW1lbnQtQ29uZmlndXJhdGlvbiwKCWlkLU1hbmFnZW1lbnQtQmFzZWQtTURULUFsbG93ZWQsCglpZC1UaW1lLVVFLVN0YXllZEluQ2VsbC1FbmhhbmNlZEdyYW51bGFyaXR5LAoJaWQtSE8tQ2F1c2UsCglpZC1UcmFjZVJlY29yZGluZ1Nlc3Npb25SZWZlcmVuY2UsCglpZC1JTVNJLAoJaWQtTWFuYWdlbWVudC1CYXNlZC1NRFQtUExNTi1MaXN0LAoJaWQtU2lnbmFsbGluZ0Jhc2VkTURUUExNTkxpc3QsCglpZC1NNFJlcG9ydCwKCWlkLU01UmVwb3J0LAoJaWQtTTZSZXBvcnQsCglpZC1NN1JlcG9ydCwKCWlkLVRpbWluZ0RpZmZlcmVuY2VVTERMLAoJaWQtVHJhY2UtQ29sbGVjdGlvbi1FbnRpdHktSVAtQWRkZXNzLAoJaWQtU2VydmluZy1DZWxsLUlkZW50aWZpZXIsCglpZC1FQVJGQ04tRXh0ZW5kZWQsCglpZC1MYXN0RS1VVFJBTlBMTU5JZGVudGl0eSwKCWlkLVJTUlEtVHlwZSwKCWlkLVJTUlEtRXh0ZW5zaW9uLAoJaWQtQWRkaXRpb25hbC1Qb3NpdGlvbmluZ0RhdGFTZXQKCgpGUk9NIFJBTkFQLUNvbnN0YW50cwoKCUNyaXRpY2FsaXR5LAoJUHJvY2VkdXJlQ29kZSwKCVByb3RvY29sSUUtSUQsCglUcmlnZ2VyaW5nTWVzc2FnZQpGUk9NIFJBTkFQLUNvbW1vbkRhdGFUeXBlcwoKCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVye30sCglSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04KRlJPTSBSQU5BUC1Db250YWluZXJzOwoKLS0gQQoKQWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEewoJcmVxdWVzdGVkLUFjY3VyYWN5LUZ1bGZpbGxlZCwKCXJlcXVlc3RlZC1BY2N1cmFjeS1Ob3QtRnVsZmlsbGVkLAoJLi4uCn0KCkFkZGl0aW9uYWwtQ1NQUy1jb29yZGluYXRpb24taW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCW9sZC1MQUkJCQkJCUxBSQkJCQkJCQlPUFRJT05BTCwKCW9sZC1SQUMJCQkJCVJBQwkJCQkJCQlPUFRJT05BTCwKCW5SSQkJCQkJCUJJVCBTVFJJTkcgKFNJWkUgKDEwKSkJCU9QVElPTkFMLAoJdUUtaXMtQXR0YWNoaW5nCQkJTlVMTAkJCQkJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0FkZGl0aW9uYWwtQ1NQUy1jb29yZGluYXRpb24taW5mb3JtYXRpb24tRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkFkZGl0aW9uYWwtQ1NQUy1jb29yZGluYXRpb24taW5mb3JtYXRpb24tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkFkZGl0aW9uYWwtUG9zaXRpb25pbmdEYXRhU2V0IDo6PSBTRVFVRU5DRShTSVpFKDEuLm1heEFkZFBvc1NldCkpIE9GIEFkZGl0aW9uYWwtUG9zaXRpb25pbmdNZXRob2RBbmRVc2FnZQoKQWRkaXRpb25hbC1Qb3NpdGlvbmluZ01ldGhvZEFuZFVzYWdlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUoMSkpCgpBbGxvY2F0aW9uT3JSZXRlbnRpb25Qcmlvcml0eSA6Oj0gU0VRVUVOQ0UgewoJcHJpb3JpdHlMZXZlbAkJCVByaW9yaXR5TGV2ZWwsCglwcmUtZW1wdGlvbkNhcGFiaWxpdHkJCVByZS1lbXB0aW9uQ2FwYWJpbGl0eSwKCXByZS1lbXB0aW9uVnVsbmVyYWJpbGl0eQlQcmUtZW1wdGlvblZ1bG5lcmFiaWxpdHksCglxdWV1aW5nQWxsb3dlZAkJCVF1ZXVpbmdBbGxvd2VkLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0FsbG9jYXRpb25PclJldGVudGlvblByaW9yaXR5LUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpBbGxvY2F0aW9uT3JSZXRlbnRpb25Qcmlvcml0eS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXJzIDo6PSBTRVFVRU5DRSB7CglhbHRNYXhCaXRyYXRlSW5mCQkJQWx0LVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZUluZiAJCQkJCQlPUFRJT05BTCwKCWFsdEd1YXJhbnRlZWRCaXRSYXRlSW5mCQlBbHQtUkFCLVBhcmFtZXRlci1HdWFyYW50ZWVkQml0cmF0ZUluZiAJCQkJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0FsdC1SQUItUGFyYW1ldGVycy1FeHRJRXN9IH0gCU9QVElPTkFMLAoJLi4uCn0KCkFsdC1SQUItUGFyYW1ldGVycy1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA2IHRvIGluZGljYXRlIGFuIGFsdGVybmF0aXZlIFJBQiBjb25maWd1cmF0aW9uIC0tCgl7IElEIGlkLUFsdGVybmF0aXZlUkFCQ29uZmlndXJhdGlvbgkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBSQUItUGFyYW1ldGVycwlQUkVTRU5DRSBvcHRpb25hbCB9fAotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNyB0byBpbmRpY2F0ZSBhbiBhbHRlcm5hdGl2ZSBsaXN0IG9mIEV4dGVuZGVkIEd1YXJhbnRlZWQgQml0cmF0ZXMgLS0KeyBJRCBpZC1BbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mCQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIEFsdC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVJbmYgCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA3IHRvIGluZGljYXRlIGFuIGFsdGVybmF0aXZlIGxpc3Qgb2YgRXh0ZW5kZWQgTWF4aW11bSBCaXRyYXRlcyAtLQp7IElEIGlkLUFsdC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkTWF4Qml0cmF0ZUluZgkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBBbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZE1heEJpdHJhdGVJbmYgCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIGluZGljYXRlIGFuIGFsdGVybmF0aXZlIGxpc3Qgb2YgU3VwcG9ydGVkIE1heGltdW0gQml0cmF0ZXMgLS0KeyBJRCBpZC1BbHQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRNYXhCaXRyYXRlSW5mCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIEFsdC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZE1heEJpdHJhdGVJbmYgCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIGluZGljYXRlIGFuIGFsdGVybmF0aXZlIGxpc3Qgb2YgU3VwcG9ydGVkIEd1YXJhbnRlZWQgQml0cmF0ZXMgLS0KeyBJRCBpZC1BbHQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZUluZgkJQ1JJVElDQUxJVFkgcmVqZWN0CUVYVEVOU0lPTiBBbHQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZUluZiAJUFJFU0VOQ0Ugb3B0aW9uYWwgfSwKCS4uLgp9CgpBbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mIDo6PSBTRVFVRU5DRSB7CglhbHRFeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlVHlwZQkJCUFsdC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlVHlwZSwKCWFsdEV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVzCQkJCUFsdC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVzCQkJT1BUSU9OQUwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgVHlwZSBvZiBFeHRlbmRlZCBHdWFyYW50ZWVkIEJpdCBSYXRlcyBJbmZvcm1hdGlvbiBJRSBpcyBzZXQgdG8gIlZhbHVlIHJhbmdlIiBvciAiRGlzY3JldGUgdmFsdWVzIiAtLSwKCS4uLgp9CgpBbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlcyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZBbHRWYWx1ZXMpKSBPRgoJQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QKCkFsdC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CTo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBFeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlCgpBbHQtUkFCLVBhcmFtZXRlci1HdWFyYW50ZWVkQml0cmF0ZUluZiA6Oj0gU0VRVUVOQ0UgewoJYWx0R3VhcmFudGVlZEJpdHJhdGVUeXBlCQkJQWx0LVJBQi1QYXJhbWV0ZXItR3VhcmFudGVlZEJpdHJhdGVUeXBlLAoJYWx0R3VhcmFudGVlZEJpdHJhdGVzCQkJCUFsdC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlcwkJCU9QVElPTkFMCgktLSBUaGlzIElFIHNoYWxsIGJlIHByZXNlbnQgaWYgdGhlIFR5cGUgb2YgR3VhcmFudGVlZCBCaXQgUmF0ZXMgSW5mb3JtYXRpb24gSUUgaXMgc2V0IHRvICJWYWx1ZSByYW5nZSIgb3IgIkRpc2NyZXRlIHZhbHVlcyIgLS0sCgkuLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXItR3VhcmFudGVlZEJpdHJhdGVUeXBlIDo6PSBFTlVNRVJBVEVEewoJdW5zcGVjaWZpZWQsCgl2YWx1ZS1yYW5nZSwKCWRpc2NyZXRlLXZhbHVlcywKCS4uLgp9CgpBbHQtUkFCLVBhcmFtZXRlci1HdWFyYW50ZWVkQml0cmF0ZXMgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mQWx0VmFsdWVzKSkgT0YKCUFsdC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdAoKCkFsdC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgR3VhcmFudGVlZEJpdHJhdGUKCkFsdC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mIDo6PSBTRVFVRU5DRSB7CglhbHRTdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZVR5cGUJCQlBbHQtUkFCLVBhcmFtZXRlci1HdWFyYW50ZWVkQml0cmF0ZVR5cGUsCglhbHRTdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZXMJCQkJQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkR3VhcmFudGVlZEJpdHJhdGVzCQkJT1BUSU9OQUwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgVHlwZSBvZiBTdXBwb3J0ZWQgR3VhcmFudGVlZCBCaXQgUmF0ZXMgSW5mb3JtYXRpb24gSUUgaXMgc2V0IHRvICJWYWx1ZSByYW5nZSIgb3IgIkRpc2NyZXRlIHZhbHVlcyIgLS0sCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IEFsdC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZEd1YXJhbnRlZWRCaXRyYXRlSW5mLUV4dElFc30gfSAJT1BUSU9OQUwsCgkuLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkR3VhcmFudGVlZEJpdHJhdGVJbmYtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewouLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkR3VhcmFudGVlZEJpdHJhdGVzIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZkFsdFZhbHVlcykpIE9GCglTdXBwb3J0ZWRSQUItUGFyYW1ldGVyQml0cmF0ZUxpc3QKCgpBbHQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZE1heEJpdHJhdGVJbmYgOjo9IFNFUVVFTkNFIHsKCWFsdEV4dGVuZGVkTWF4Qml0cmF0ZVR5cGUJCQlBbHQtUkFCLVBhcmFtZXRlci1NYXhCaXRyYXRlVHlwZSwKCWFsdEV4dGVuZGVkTWF4Qml0cmF0ZXMJCQkJQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlcwkJCU9QVElPTkFMCgktLSBUaGlzIElFIHNoYWxsIGJlIHByZXNlbnQgaWYgdGhlIFR5cGUgb2YgRXh0ZW5kZWQgQWx0ZXJuYXRpdmUgTWF4aW11bSBCaXQgUmF0ZXMgSW5mb3JtYXRpb24gSUUgaXMgc2V0IHRvICJWYWx1ZSByYW5nZSIgb3IgIkRpc2NyZXRlIHZhbHVlcyIgLS0sCgkuLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlcyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZBbHRWYWx1ZXMpKSBPRgoJQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdAoKQWx0LVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgRXh0ZW5kZWRNYXhCaXRyYXRlCgpBbHQtUkFCLVBhcmFtZXRlci1NYXhCaXRyYXRlSW5mIDo6PSBTRVFVRU5DRSB7CglhbHRNYXhCaXRyYXRlVHlwZQkJCUFsdC1SQUItUGFyYW1ldGVyLU1heEJpdHJhdGVUeXBlLAoJYWx0TWF4Qml0cmF0ZXMJCQkJQWx0LVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZXMJCQlPUFRJT05BTAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IGlmIHRoZSBUeXBlIG9mIEFsdGVybmF0aXZlIE1heGltdW4gQml0IFJhdGVzIEluZm9ybWF0aW9uIElFIGlzIHNldCB0byAiVmFsdWUgcmFuZ2UiIG9yICJEaXNjcmV0ZSB2YWx1ZXMiIC0tLAoJLi4uCn0KCkFsdC1SQUItUGFyYW1ldGVyLU1heEJpdHJhdGVUeXBlIDo6PSBFTlVNRVJBVEVEewoJdW5zcGVjaWZpZWQsCgl2YWx1ZS1yYW5nZSwKCWRpc2NyZXRlLXZhbHVlcywKCS4uLgp9CgpBbHQtUkFCLVBhcmFtZXRlci1NYXhCaXRyYXRlcyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZBbHRWYWx1ZXMpKSBPRgoJQWx0LVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZUxpc3QKCgpBbHQtUkFCLVBhcmFtZXRlci1NYXhCaXRyYXRlTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgTWF4Qml0cmF0ZQoKCkFsdC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZE1heEJpdHJhdGVJbmYgOjo9IFNFUVVFTkNFIHsKCWFsdFN1cHBvcnRlZE1heEJpdHJhdGVUeXBlCQkJQWx0LVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZVR5cGUsCglhbHRTdXBwb3J0ZWRNYXhCaXRyYXRlcwkJCQlBbHQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRNYXhCaXRyYXRlcwkJCU9QVElPTkFMCgktLSBUaGlzIElFIHNoYWxsIGJlIHByZXNlbnQgaWYgdGhlIFR5cGUgb2YgU3VwcG9ydGVkIEFsdGVybmF0aXZlIE1heGltdW4gQml0IFJhdGVzIEluZm9ybWF0aW9uIElFIGlzIHNldCB0byAiVmFsdWUgcmFuZ2UiIG9yICJEaXNjcmV0ZSB2YWx1ZXMiIC0tLAoJIGlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkTWF4Qml0cmF0ZUluZi1FeHRJRXN9IH0gCU9QVElPTkFMLAouLi4KfQoKQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkTWF4Qml0cmF0ZUluZi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7Ci4uLgp9CgoKQWx0LVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkTWF4Qml0cmF0ZXMgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mQWx0VmFsdWVzKSkgT0YKCVN1cHBvcnRlZFJBQi1QYXJhbWV0ZXJCaXRyYXRlTGlzdAoKQWx0ZXJuYXRpdmVSQUJDb25maWd1cmF0aW9uUmVxdWVzdCA6Oj0gRU5VTUVSQVRFRHsKCWFsdGVybmF0aXZlLVJBQi1jb25maWd1cmF0aW9uLVJlcXVlc3RlZCwKCS4uLgp9CgpVRS1BcHBsaWNhdGlvbi1MYXllci1NZWFzdXJlbWVudC1Db25maWd1cmF0aW9uCTo6PSBTRVFVRU5DRSB7CgkJYXBwbGljYXRpb25MYXllckNvbnRhaW5lckZvck1lYXN1cmVtZW50Q29uZmlndXJhdGlvbgkJT0NURVQgU1RSSU5HICggU0laRSAoMS4uMTAwMCkpLAoJCWFyZWFTY29wZUZvclVFQXBwbGljYXRpb25MYXllck1lYXN1cmVtZW50Q29uZmlndXJhdGlvbgkJCQkJQXJlYVNjb3BlRm9yVUVBcHBsaWNhdGlvbkxheWVyTWVhc3VyZW1lbnRDb25maWd1cmF0aW9uLAoJCS4uLgp9CgpVRS1BcHBsaWNhdGlvbi1MYXllci1NZWFzdXJlbWVudC1Db25maWd1cmF0aW9uLUZvci1SZWxvY2F0aW9uCTo6PSBTRVFVRU5DRSB7CgkJYXJlYVNjb3BlRm9yVUVBcHBsaWNhdGlvbkxheWVyTWVhc3VyZW1lbnRDb25maWd1cmF0aW9uCQkJCQlBcmVhU2NvcGVGb3JVRUFwcGxpY2F0aW9uTGF5ZXJNZWFzdXJlbWVudENvbmZpZ3VyYXRpb24sCgkJdHJhY2VSZWZlcmVuY2UJCQkJCQlUcmFjZVJlZmVyZW5jZSwKCQl0cmFjZVByb3BhZ2F0aW9uUGFyYW1ldGVycwkJCVRyYWNlUHJvcGFnYXRpb25QYXJhbWV0ZXJzIE9QVElPTkFMLAoJCXRyYWNlQ29sbGVjdGlvbkVudGl0eUlQQWRkcmVzcwkJVHJhbnNwb3J0TGF5ZXJBZGRyZXNzCQkJT1BUSU9OQUwsCgkJLi4uCn0KCgpBUE4JOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMjU1KSkKLS0gUmVmZXJlbmNlOiAyMy4wMDMKCkFyZWFTY29wZUZvclVFQXBwbGljYXRpb25MYXllck1lYXN1cmVtZW50Q29uZmlndXJhdGlvbiA6Oj0JQ0hPSUNFIHsKCWNlbGxiYXNlZAkJCUNlbGxCYXNlZCwKCWxhYmFzZWQJCQkJTEFCYXNlZCwKCXJhYmFzZWQJCQkJUkFCYXNlZCwKCXBsbW4tYXJlYS1iYXNlZAkJUExNTkJhc2VkLAoJLi4uCn0KCkFyZWFJZGVudGl0eSA6Oj0gQ0hPSUNFIHsKCXNBSQkJCQlTQUksCglnZW9ncmFwaGljYWxBcmVhCQlHZW9ncmFwaGljYWxBcmVhLAoJLi4uCn0KCkFzcy1SQUItUGFyYW1ldGVycyA6Oj0gU0VRVUVOQ0UgewoJYXNzTWF4Qml0cmF0ZUluZgkJCUFzcy1SQUItUGFyYW1ldGVyLU1heEJpdHJhdGVMaXN0IAkJCQkJCU9QVElPTkFMLAoJYXNzR3VhcmFudGVlZEJpdFJhdGVJbmYJCUFzcy1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdCAJCQkJT1BUSU9OQUwsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7QXNzLVJBQi1QYXJhbWV0ZXJzLUV4dElFc30gfSAJT1BUSU9OQUwsCgkuLi4KfQoKQXNzLVJBQi1QYXJhbWV0ZXJzLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDcgdG8gaW5kaWNhdGUgYW4gZXh0ZW5kZWQgYXNzaWduZWQgR3VhcmFudGVlZCBCaXRyYXRlIC0tCgl7IElEIGlkLUFzcy1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIEFzcy1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0IAkgUFJFU0VOQ0Ugb3B0aW9uYWwgfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDcgdG8gaW5kaWNhdGUgYW4gZXh0ZW5kZWQgYXNzaWduZWQgTWF4aW11bSBCaXRyYXRlIC0tCgl7IElEIGlkLUFzcy1SQUItUGFyYW1ldGVyLUV4dGVuZGVkTWF4Qml0cmF0ZUxpc3QJCUNSSVRJQ0FMSVRZIHJlamVjdAlFWFRFTlNJT04gQXNzLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdCAJUFJFU0VOQ0Ugb3B0aW9uYWwgfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDggdG8gaW5kaWNhdGUgYW4gc3VwcG9ydGVkIGFzc2lnbmVkIE1heGltdW0gQml0cmF0ZSAtLQoJeyBJRCBpZC1Bc3MtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRNYXhCaXRyYXRlTGlzdAkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBTdXBwb3J0ZWRSQUItUGFyYW1ldGVyQml0cmF0ZUxpc3QgCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIGluZGljYXRlIGFuIHN1cHBvcnRlZCBhc3NpZ25lZCBHdWFyYW50ZWVkIEJpdHJhdGUgLS0KCXsgSUQgaWQtQXNzLVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIFN1cHBvcnRlZFJBQi1QYXJhbWV0ZXJCaXRyYXRlTGlzdAlQUkVTRU5DRSBvcHRpb25hbCB9LAoJLi4uCn0KCkFzcy1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CTo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBFeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlCgpBc3MtUkFCLVBhcmFtZXRlci1FeHRlbmRlZE1heEJpdHJhdGVMaXN0IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBFeHRlbmRlZE1heEJpdHJhdGUKCgpBc3MtUkFCLVBhcmFtZXRlci1HdWFyYW50ZWVkQml0cmF0ZUxpc3QJOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mU2VwYXJhdGVUcmFmZmljRGlyZWN0aW9ucykpIE9GIEd1YXJhbnRlZWRCaXRyYXRlCgoKQXNzLVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZUxpc3QgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mU2VwYXJhdGVUcmFmZmljRGlyZWN0aW9ucykpIE9GIE1heEJpdHJhdGUKCkF1dGhvcmlzZWRQTE1OcyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZQTE1Oc1NOKSkgT0YKCVNFUVVFTkNFIHsKCQlwTE1OaWRlbnRpdHkJCQlQTE1OaWRlbnRpdHksCgkJYXV0aG9yaXNlZFNOQXNMaXN0CQlBdXRob3Jpc2VkU05BcwkJT1BUSU9OQUwsCgkJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0F1dGhvcmlzZWRQTE1Ocy1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCgl9CgpBdXRob3Jpc2VkUExNTnMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkF1dGhvcmlzZWRTTkFzIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNOQXMpKSBPRiBTTkFDCgoKLS0gQgoKQmFyb21ldHJpY1ByZXNzdXJlIDo6PSBJTlRFR0VSICgzMDAwMC4uMTE1MDAwKQoKQmluZGluZ0lECQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQoKQnJvYWRjYXN0QXNzaXN0YW5jZURhdGFEZWNpcGhlcmluZ0tleXMJOjo9IFNFUVVFTkNFIHsKCWNpcGhlcmluZ0tleUZsYWcJCUJJVCBTVFJJTkcgKFNJWkUgKDEpKSwKCWN1cnJlbnREZWNpcGhlcmluZ0tleQlCSVQgU1RSSU5HIChTSVpFICg1NikpLAoJbmV4dERlY2lwaGVyaW5nS2V5CQlCSVQgU1RSSU5HIChTSVpFICg1NikpLAoJLi4uCn0KCi0tIEMKCgpDYXVzZSA6Oj0gQ0hPSUNFIHsKCXJhZGlvTmV0d29yawkJCUNhdXNlUmFkaW9OZXR3b3JrLAoJdHJhbnNtaXNzaW9uTmV0d29yawkJQ2F1c2VUcmFuc21pc3Npb25OZXR3b3JrLAoJbkFTCQkJCUNhdXNlTkFTLAoJcHJvdG9jb2wJCQlDYXVzZVByb3RvY29sLAoJbWlzYwkJCQlDYXVzZU1pc2MsCglub24tU3RhbmRhcmQJCQlDYXVzZU5vbi1TdGFuZGFyZCwKCS4uLiwKCXJhZGlvTmV0d29ya0V4dGVuc2lvbglDYXVzZVJhZGlvTmV0d29ya0V4dGVuc2lvbgp9CgpDYXVzZU1pc2MgOjo9IElOVEVHRVIgewoJb20taW50ZXJ2ZW50aW9uICgxMTMpLAoJbm8tcmVzb3VyY2UtYXZhaWxhYmxlICgxMTQpLAoJdW5zcGVjaWZpZWQtZmFpbHVyZSAoMTE1KSwKCW5ldHdvcmstb3B0aW1pc2F0aW9uICgxMTYpCn0gKDExMy4uMTI4KQoKQ2F1c2VOQVMgOjo9IElOVEVHRVIgewoJdXNlci1yZXN0cmljdGlvbi1zdGFydC1pbmRpY2F0aW9uICg4MSksCgl1c2VyLXJlc3RyaWN0aW9uLWVuZC1pbmRpY2F0aW9uICg4MiksCglub3JtYWwtcmVsZWFzZSAoODMpLAoJY3NnLXN1YnNjcmlwdGlvbi1leHBpcnkoODQpCn0gKDgxLi45NikKCkNhdXNlUHJvdG9jb2wgOjo9IElOVEVHRVIgewoJdHJhbnNmZXItc3ludGF4LWVycm9yICg5NyksCglzZW1hbnRpYy1lcnJvciAoOTgpLAoJbWVzc2FnZS1ub3QtY29tcGF0aWJsZS13aXRoLXJlY2VpdmVyLXN0YXRlICg5OSksCglhYnN0cmFjdC1zeW50YXgtZXJyb3ItcmVqZWN0ICgxMDApLAoJYWJzdHJhY3Qtc3ludGF4LWVycm9yLWlnbm9yZS1hbmQtbm90aWZ5ICgxMDEpLAoJYWJzdHJhY3Qtc3ludGF4LWVycm9yLWZhbHNlbHktY29uc3RydWN0ZWQtbWVzc2FnZSAoMTAyKQp9ICg5Ny4uMTEyKQoKQ2F1c2VSYWRpb05ldHdvcmsgOjo9IElOVEVHRVIgewoJcmFiLXByZS1lbXB0ZWQgKDEpLAoJdHJlbG9jb3ZlcmFsbC1leHBpcnkgKDIpLAoJdHJlbG9jcHJlcC1leHBpcnkgKDMpLAoJdHJlbG9jY29tcGxldGUtZXhwaXJ5ICg0KSwKCXRxdWVpbmctZXhwaXJ5ICg1KSwKCXJlbG9jYXRpb24tdHJpZ2dlcmVkICg2KSwKCXRyZWxsb2NhbGxvYy1leHBpcnkoNyksCgl1bmFibGUtdG8tZXN0YWJsaXNoLWR1cmluZy1yZWxvY2F0aW9uICg4KSwKCXVua25vd24tdGFyZ2V0LXJuYyAoOSksCglyZWxvY2F0aW9uLWNhbmNlbGxlZCAoMTApLAoJc3VjY2Vzc2Z1bC1yZWxvY2F0aW9uICgxMSksCglyZXF1ZXN0ZWQtY2lwaGVyaW5nLWFuZC1vci1pbnRlZ3JpdHktcHJvdGVjdGlvbi1hbGdvcml0aG1zLW5vdC1zdXBwb3J0ZWQgKDEyKSwKCWNvbmZsaWN0LXdpdGgtYWxyZWFkeS1leGlzdGluZy1pbnRlZ3JpdHktcHJvdGVjdGlvbi1hbmQtb3ItY2lwaGVyaW5nLWluZm9ybWF0aW9uICgxMyksCglmYWlsdXJlLWluLXRoZS1yYWRpby1pbnRlcmZhY2UtcHJvY2VkdXJlICgxNCksCglyZWxlYXNlLWR1ZS10by11dHJhbi1nZW5lcmF0ZWQtcmVhc29uICgxNSksCgl1c2VyLWluYWN0aXZpdHkgKDE2KSwKCXRpbWUtY3JpdGljYWwtcmVsb2NhdGlvbiAoMTcpLAoJcmVxdWVzdGVkLXRyYWZmaWMtY2xhc3Mtbm90LWF2YWlsYWJsZSAoMTgpLAoJaW52YWxpZC1yYWItcGFyYW1ldGVycy12YWx1ZSAoMTkpLAoJcmVxdWVzdGVkLW1heGltdW0tYml0LXJhdGUtbm90LWF2YWlsYWJsZSAoMjApLAoJcmVxdWVzdGVkLWd1YXJhbnRlZWQtYml0LXJhdGUtbm90LWF2YWlsYWJsZSAoMjEpLAoJcmVxdWVzdGVkLXRyYW5zZmVyLWRlbGF5LW5vdC1hY2hpZXZhYmxlICgyMiksCglpbnZhbGlkLXJhYi1wYXJhbWV0ZXJzLWNvbWJpbmF0aW9uICgyMyksCgljb25kaXRpb24tdmlvbGF0aW9uLWZvci1zZHUtcGFyYW1ldGVycyAoMjQpLAoJY29uZGl0aW9uLXZpb2xhdGlvbi1mb3ItdHJhZmZpYy1oYW5kbGluZy1wcmlvcml0eSAoMjUpLAoJY29uZGl0aW9uLXZpb2xhdGlvbi1mb3ItZ3VhcmFudGVlZC1iaXQtcmF0ZSAoMjYpLAoJdXNlci1wbGFuZS12ZXJzaW9ucy1ub3Qtc3VwcG9ydGVkICgyNyksCglpdS11cC1mYWlsdXJlICgyOCksCglyZWxvY2F0aW9uLWZhaWx1cmUtaW4tdGFyZ2V0LUNOLVJOQy1vci10YXJnZXQtc3lzdGVtKDI5KSwKCWludmFsaWQtUkFCLUlEICgzMCksCgluby1yZW1haW5pbmctcmFiICgzMSksCglpbnRlcmFjdGlvbi13aXRoLW90aGVyLXByb2NlZHVyZSAoMzIpLAoJcmVxdWVzdGVkLW1heGltdW0tYml0LXJhdGUtZm9yLWRsLW5vdC1hdmFpbGFibGUgKDMzKSwKCXJlcXVlc3RlZC1tYXhpbXVtLWJpdC1yYXRlLWZvci11bC1ub3QtYXZhaWxhYmxlICgzNCksCglyZXF1ZXN0ZWQtZ3VhcmFudGVlZC1iaXQtcmF0ZS1mb3ItZGwtbm90LWF2YWlsYWJsZSAoMzUpLAoJcmVxdWVzdGVkLWd1YXJhbnRlZWQtYml0LXJhdGUtZm9yLXVsLW5vdC1hdmFpbGFibGUgKDM2KSwKCXJlcGVhdGVkLWludGVncml0eS1jaGVja2luZy1mYWlsdXJlICgzNyksCglyZXF1ZXN0ZWQtcmVxdWVzdC10eXBlLW5vdC1zdXBwb3J0ZWQgKDM4KSwKCXJlcXVlc3Qtc3VwZXJzZWRlZCAoMzkpLAoJcmVsZWFzZS1kdWUtdG8tVUUtZ2VuZXJhdGVkLXNpZ25hbGxpbmctY29ubmVjdGlvbi1yZWxlYXNlICg0MCksCglyZXNvdXJjZS1vcHRpbWlzYXRpb24tcmVsb2NhdGlvbiAoNDEpLAoJcmVxdWVzdGVkLWluZm9ybWF0aW9uLW5vdC1hdmFpbGFibGUgKDQyKSwKCXJlbG9jYXRpb24tZGVzaXJhYmxlLWZvci1yYWRpby1yZWFzb25zICg0MyksCglyZWxvY2F0aW9uLW5vdC1zdXBwb3J0ZWQtaW4tdGFyZ2V0LVJOQy1vci10YXJnZXQtc3lzdGVtICg0NCksCglkaXJlY3RlZC1yZXRyeSAoNDUpLAoJcmFkaW8tY29ubmVjdGlvbi13aXRoLVVFLUxvc3QgKDQ2KSwKCXJOQy11bmFibGUtdG8tZXN0YWJsaXNoLWFsbC1SRkNzICg0NyksCglkZWNpcGhlcmluZy1rZXlzLW5vdC1hdmFpbGFibGUoNDgpLAoJZGVkaWNhdGVkLWFzc2lzdGFuY2UtZGF0YS1ub3QtYXZhaWxhYmxlKDQ5KSwKCXJlbG9jYXRpb24tdGFyZ2V0LW5vdC1hbGxvd2VkICg1MCksCglsb2NhdGlvbi1yZXBvcnRpbmctY29uZ2VzdGlvbiAoNTEpLAoJcmVkdWNlLWxvYWQtaW4tc2VydmluZy1jZWxsICg1MiksCgluby1yYWRpby1yZXNvdXJjZXMtYXZhaWxhYmxlLWluLXRhcmdldC1jZWxsICg1MyksCglnRVJBTi1JdW1vZGUtZmFpbHVyZSAoNTQpLAoJYWNjZXNzLXJlc3RyaWN0ZWQtZHVlLXRvLXNoYXJlZC1uZXR3b3JrcyAoNTUpLAoJaW5jb21pbmctcmVsb2NhdGlvbi1ub3Qtc3VwcG9ydGVkLWR1ZS10by1QVUVTQklORS1mZWF0dXJlICg1NiksCgl0cmFmZmljLWxvYWQtaW4tdGhlLXRhcmdldC1jZWxsLWhpZ2hlci10aGFuLWluLXRoZS1zb3VyY2UtY2VsbCAoNTcpLAoJbUJNUy1uby1tdWx0aWNhc3Qtc2VydmljZS1mb3ItdGhpcy1VRSg1OCksCgltQk1TLXVua25vd24tVUUtSUQoNTkpLAoJc3VjY2Vzc2Z1bC1NQk1TLXNlc3Npb24tc3RhcnQtbm8tZGF0YS1iZWFyZXItbmVjZXNzYXJ5KDYwKSwKCW1CTVMtc3VwZXJzZWRlZC1kdWUtdG8tTk5TRig2MSksCgltQk1TLVVFLWxpbmtpbmctYWxyZWFkeS1kb25lKDYyKSwKCW1CTVMtVUUtZGUtbGlua2luZy1mYWlsdXJlLW5vLWV4aXN0aW5nLVVFLWxpbmtpbmcoNjMpLAoJdE1HSS11bmtub3duKDY0KQp9ICgxLi42NCkKCkNhdXNlUmFkaW9OZXR3b3JrRXh0ZW5zaW9uIDo6PSBJTlRFR0VSIHsKCWlQLW11bHRpY2FzdC1hZGRyZXNzLWFuZC1BUE4tbm90LXZhbGlkKDI1NyksCgltQk1TLWRlLXJlZ2lzdHJhdGlvbi1yZWplY3RlZC1kdWUtdG8taW1wbGljaXQtcmVnaXN0cmF0aW9uKDI1OCksCgltQk1TLXJlcXVlc3Qtc3VwZXJzZWRlZCgyNTkpLAoJbUJNUy1kZS1yZWdpc3RyYXRpb24tZHVyaW5nLXNlc3Npb24tbm90LWFsbG93ZWQoMjYwKSwKCW1CTVMtbm8tZGF0YS1iZWFyZXItbmVjZXNzYXJ5KDI2MSksCglwZXJpb2RpY0xvY2F0aW9uSW5mb3JtYXRpb25Ob3RBdmFpbGFibGUoMjYyKSwKCWdUUC1SZXNvdXJjZXMtVW5hdmFpbGFibGUoMjYzKSwKCXRNR0ktaW5Vc2Utb3ZlcmxhcHBpbmctTUJNUy1zZXJ2aWNlLWFyZWEoMjY0KSwKCW1CTVMtbm8tY2VsbC1pbi1NQk1TLXNlcnZpY2UtYXJlYSgyNjUpLAoJbm8tSXUtQ1MtVVAtcmVsb2NhdGlvbigyNjYpLAoJc3VjY2Vzc2Z1bC1NQk1TLVNlc3Npb24tU3RhcnQtSVAtTXVsdGljYXN0LUJlYXJlci1lc3RhYmxpc2hlZCgyNjcpLAoJY1MtZmFsbGJhY2stdHJpZ2dlcmVkKDI2OCksCglpbnZhbGlkLUNTRy1JZCgyNjkpCn0gKDI1Ny4uNTEyKQoKQ2F1c2VOb24tU3RhbmRhcmQgOjo9IElOVEVHRVIgKDEyOS4uMjU2KQotLSBDYXVzZSB2YWx1ZSAyNTYgc2hhbGwgbm90IGJlIHVzZWQgLS0KCkNhdXNlVHJhbnNtaXNzaW9uTmV0d29yayA6Oj0gSU5URUdFUiB7CglzaWduYWxsaW5nLXRyYW5zcG9ydC1yZXNvdXJjZS1mYWlsdXJlICg2NSksCglpdS10cmFuc3BvcnQtY29ubmVjdGlvbi1mYWlsZWQtdG8tZXN0YWJsaXNoICg2NikKfSAoNjUuLjgwKQoKQ2VsbC1BY2Nlc3MtTW9kZTo6PSBFTlVNRVJBVEVEIHsKCWh5YnJpZCwKCS4uLgp9CgpDZWxsQmFzZWQ6Oj0gU0VRVUVOQ0UgewoJY2VsbElkTGlzdAkJCUNlbGxJZExpc3QsCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtDZWxsQmFzZWQtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkNlbGxCYXNlZC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKQ2VsbElkTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZDZWxsSWRzKSkgT0YKCUNlbGwtSWQKCkNlbGwtSWQJCTo6PSBJTlRFR0VSICgwLi4yNjg0MzU0NTUpCgpDZWxsLUNhcGFjaXR5LUNsYXNzLVZhbHVlIDo6PSBJTlRFR0VSICgxLi4xMDAsLi4uKQoKQ2VsbExvYWRJbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewoJY2VsbC1DYXBhY2l0eS1DbGFzcy1WYWx1ZQlDZWxsLUNhcGFjaXR5LUNsYXNzLVZhbHVlLAoJbG9hZFZhbHVlCQkJCQlMb2FkVmFsdWUsCglyVExvYWRWYWx1ZQkJCQkJUlRMb2FkVmFsdWUJCQkJCQlPUFRJT05BTCwKCW5SVExvYWRJbmZvcm1hdGlvblZhbHVlCQlOUlRMb2FkSW5mb3JtYXRpb25WYWx1ZQkJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgQ2VsbExvYWRJbmZvcm1hdGlvbi1FeHRJRXMgfSB9CQlPUFRJT05BTCwKCS4uLgp9CgpDZWxsTG9hZEluZm9ybWF0aW9uLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpDZWxsTG9hZEluZm9ybWF0aW9uR3JvdXAgOjo9IFNFUVVFTkNFIHsKCXNvdXJjZUNlbGxJRAkJCQkJCVNvdXJjZUNlbGxJRCwKCXVwbGlua0NlbGxMb2FkSW5mb3JtYXRpb24JCQlDZWxsTG9hZEluZm9ybWF0aW9uCQlPUFRJT05BTCwKCWRvd25saW5rQ2VsbExvYWRJbmZvcm1hdGlvbgkJCUNlbGxMb2FkSW5mb3JtYXRpb24JCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgQ2VsbExvYWRJbmZvcm1hdGlvbkdyb3VwLUV4dElFcyB9IH0JT1BUSU9OQUwsCgkuLi4KfQoKQ2VsbExvYWRJbmZvcm1hdGlvbkdyb3VwLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpDZWxsVHlwZSA6Oj0gRU5VTUVSQVRFRHsKCW1hY3JvLAoJbWljcm8sCglwaWNvLAoJZmVtdG8sCgkuLi4KfQoKQ2l2aWNBZGRyZXNzIDo6PSBPQ1RFVCBTVFJJTkcKCkNsaWVudFR5cGUgOjo9IEVOVU1FUkFURUQgewoJZW1lcmdlbmN5LVNlcnZpY2VzLAoJdmFsdWUtQWRkZWQtU2VydmljZXMsCglwTE1OLU9wZXJhdG9yLVNlcnZpY2VzLAoJbGF3ZnVsLUludGVyY2VwdC1TZXJ2aWNlcywKCXBMTU4tT3BlcmF0b3ItQnJvYWRjYXN0LVNlcnZpY2VzLAoJcExNTi1PcGVyYXRvci1PLWV0LU0sCglwTE1OLU9wZXJhdG9yLUFub255bW91cy1TdGF0aXN0aWNzLAoJcExNTi1PcGVyYXRvci1UYXJnZXQtTVMtU2VydmljZS1TdXBwb3J0LAoJLi4uCn0KCkNyaXRpY2FsaXR5RGlhZ25vc3RpY3MgOjo9IFNFUVVFTkNFIHsKCXByb2NlZHVyZUNvZGUJCQlQcm9jZWR1cmVDb2RlCQkJT1BUSU9OQUwsCgl0cmlnZ2VyaW5nTWVzc2FnZQkJVHJpZ2dlcmluZ01lc3NhZ2UJCU9QVElPTkFMLAoJcHJvY2VkdXJlQ3JpdGljYWxpdHkJCUNyaXRpY2FsaXR5CQkJT1BUSU9OQUwsCglpRXNDcml0aWNhbGl0eURpYWdub3N0aWNzCQlDcml0aWNhbGl0eURpYWdub3N0aWNzLUlFLUxpc3QgCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0NyaXRpY2FsaXR5RGlhZ25vc3RpY3MtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkNyaXRpY2FsaXR5RGlhZ25vc3RpY3MtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkNyaXRpY2FsaXR5RGlhZ25vc3RpY3MtSUUtTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZFcnJvcnMpKSBPRgoJU0VRVUVOQ0UgewoJCWlFQ3JpdGljYWxpdHkJCUNyaXRpY2FsaXR5LAoJCWlFLUlECQkJCVByb3RvY29sSUUtSUQsCgkJcmVwZXRpdGlvbk51bWJlcgkJUmVwZXRpdGlvbk51bWJlcjAJCU9QVElPTkFMLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtDcml0aWNhbGl0eURpYWdub3N0aWNzLUlFLUxpc3QtRXh0SUVzfSB9IE9QVElPTkFMLAoJCS4uLgoJfQoKQ3JpdGljYWxpdHlEaWFnbm9zdGljcy1JRS1MaXN0LUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDk5IHRvIGVuYWJsZSByZXBvcnRpbmcgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIGRvd24gdG8gdGhlIGVycm9uZW91cyBJRSAtLQoJewlJRCBpZC1NZXNzYWdlU3RydWN0dXJlCUNSSVRJQ0FMSVRZIGlnbm9yZQkJRVhURU5TSU9OIE1lc3NhZ2VTdHJ1Y3R1cmUJUFJFU0VOQ0Ugb3B0aW9uYWwJfSB8Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA5OSB0byBlbmFibGUgcmVwb3J0aW5nIGlmIGEgcmVwb3J0ZWQgZXJyb3IgaXMgZHVlIHRvIGEgbm90IHVuZGVyc3Rvb2Qgb3IgYSBtaXNzaW5nIElFIC0tCgl7CUlEIGlkLVR5cGVPZkVycm9yCQlDUklUSUNBTElUWSBpZ25vcmUJCUVYVEVOU0lPTiBUeXBlT2ZFcnJvcgkJUFJFU0VOQ0UgbWFuZGF0b3J5CX0sCgkuLi4KfQoKTWVzc2FnZVN0cnVjdHVyZSA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZMZXZlbHMpKSBPRgoJU0VRVUVOQ0UgewoJCWlFLUlECQkJCQlQcm90b2NvbElFLUlELAoJCXJlcGV0aXRpb25OdW1iZXIJCVJlcGV0aXRpb25OdW1iZXIxCQlPUFRJT05BTCwKCQlpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7TWVzc2FnZVN0cnVjdHVyZS1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCgl9CgpNZXNzYWdlU3RydWN0dXJlLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpDR0kgOjo9IFNFUVVFTkNFIHsKCXBMTU5pZGVudGl0eQkJCQlQTE1OaWRlbnRpdHksCglsQUMJCQkJTEFDLAoJY0kJCQkJQ0ksCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7Q0dJLUV4dElFc30gfSBPUFRJT05BTAp9CgpDR0ktRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNiB0byBlbmFibGUgSW50ZXItUkFUIFBTIEhhbmRvdmVyIGJldHdlZW4gVVRSQU4gYW5kIEdFUkFOIEEvR2IgLS0KCXsJSUQgaWQtUkFDCUNSSVRJQ0FMSVRZIGlnbm9yZQkJRVhURU5TSU9OIFJBQwlQUkVTRU5DRSBvcHRpb25hbAl9LAoJLi4uCn0KCkNob3NlbkVuY3J5cHRpb25BbGdvcml0aG0gCQk6Oj0gRW5jcnlwdGlvbkFsZ29yaXRobQoKQ2hvc2VuSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobSAJOjo9IEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG0KCkNJCQkJCQk6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyKSkKCkNsYXNzbWFya0luZm9ybWF0aW9uMgkJCTo6PSBPQ1RFVCBTVFJJTkcKCkNsYXNzbWFya0luZm9ybWF0aW9uMwkJCTo6PSBPQ1RFVCBTVFJJTkcKCkNOLURvbWFpbkluZGljYXRvciA6Oj0gRU5VTUVSQVRFRCB7Cgljcy1kb21haW4sCglwcy1kb21haW4KfQoKQ04tSUQJCQkJOjo9IElOVEVHRVIgKDAuLjQwOTUpCgpDb3JyZWxhdGlvbi1JRAk6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0KSkKCkNTRkItSW5mb3JtYXRpb24gOjo9IEVOVU1FUkFURUQgewoJY3NmYiwKCWNzZmItaGlnaC1wcmlvcml0eSwKCS4uLgp9CgpDU0ctSWQJCTo6PSBCSVQgU1RSSU5HIChTSVpFICgyNykpCgpDU0ctSWQtTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZDU0dzKSkgT0YKCUNTRy1JZAoKQ1NHLU1lbWJlcnNoaXAtU3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKCW1lbWJlciwKCW5vbi1tZW1iZXIsCgkuLi4KfQoKLS0gRAoKRGF0YVBEVVR5cGUJCTo6PQlFTlVNRVJBVEVEIHsKCQkJCQlwRFV0eXBlMCwKCQkJCQlwRFV0eXBlMSwKCQkJCQkuLi4KCQkJCQl9CgpEYXRhVm9sdW1lUmVmZXJlbmNlCQkJOjo9IElOVEVHRVIgKDAuLjI1NSkKCkRhdGFWb2x1bWVSZXBvcnRpbmdJbmRpY2F0aW9uIDo6PSBFTlVNRVJBVEVEIHsKCWRvLXJlcG9ydCwKCWRvLW5vdC1yZXBvcnQKfQoKRENILUlEIDo6PSBJTlRFR0VSICgwLi4yNTUpCgpEQ04tSUQgOjo9IElOVEVHRVIgKDAuLjY1NTM1KQoKCkRlbGl2ZXJ5T2ZFcnJvbmVvdXNTRFUgOjo9IEVOVU1FUkFURUQgewoJeWVzLAoJbm8sCgluby1lcnJvci1kZXRlY3Rpb24tY29uc2lkZXJhdGlvbgp9CgpEZWxpdmVyeU9yZGVyOjo9IEVOVU1FUkFURUQgewoJZGVsaXZlcnktb3JkZXItcmVxdWVzdGVkLAoJZGVsaXZlcnktb3JkZXItbm90LXJlcXVlc3RlZAp9CgpEZWx0YVJBTGlzdG9mSWRsZU1vZGVVRXMgOjo9IFNFUVVFTkNFIHsKCW5ld1JBTGlzdG9mSWRsZU1vZGVVRXMJCQkJCU5ld1JBTGlzdG9mSWRsZU1vZGVVRXMJT1BUSU9OQUwsCglyQUxpc3R3aXRoTm9JZGxlTW9kZVVFc0FueU1vcmUJCQlSQUxpc3R3aXRoTm9JZGxlTW9kZVVFc0FueU1vcmUJT1BUSU9OQUwsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7RGVsdGFSQUxpc3RvZklkbGVNb2RlVUVzLUV4dElFc30gfSBPUFRJT05BTAp9CgpOZXdSQUxpc3RvZklkbGVNb2RlVUVzIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TUJNU1JBKSkgT0YKCVJBQwoKUkFMaXN0d2l0aE5vSWRsZU1vZGVVRXNBbnlNb3JlIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TUJNU1JBKSkgT0YKCVJBQwoKRGVsdGFSQUxpc3RvZklkbGVNb2RlVUVzLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKeyBJRCBpZC1uZXdMQUxpc3RvZklkbGVNb2RlVUVzCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIExBTGlzdG9mSWRsZU1vZGVVRXMJCQkJUFJFU0VOQ0UgY29uZGl0aW9uYWwJfXwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgTmV3IFJBIExpc3Qgb2YgSWRsZSBNb2RlIFVFcyBJRSBpcyBpbmNsdWRlZC4gLS0KeyBJRCBpZC1MQUxpc3R3aXRoTm9JZGxlTW9kZVVFc0FueU1vcmUJCUNSSVRJQ0FMSVRZIHJlamVjdAlFWFRFTlNJT04gTEFMaXN0b2ZJZGxlTW9kZVVFcwkJCQlQUkVTRU5DRSBjb25kaXRpb25hbAl9LAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50aWYgdGhlIFJBIExpc3Qgd2l0aCBObyBJZGxlIE1vZGUgVUVzIEFueSBNb3JlIElFIGlzIGluY2x1ZGVkLiAtLQoJLi4uCn0KCkZvcndhcmRpbmdJbmRpY2F0aW9uOjo9RU5VTUVSQVRFRHsKCWZvcndhcmRpbmctYWRtaXR0ZWQsCgkuLi4KfQoKREwtR1RQLVBEVS1TZXF1ZW5jZU51bWJlcgkJOjo9IElOVEVHRVIgKDAuLjY1NTM1KQoKREwtTi1QRFUtU2VxdWVuY2VOdW1iZXIgCQk6Oj0gSU5URUdFUiAoMC4uNjU1MzUpCgpELVJOVEkJCQkJCTo6PSBJTlRFR0VSICgwLi4xMDQ4NTc1KQoKRFJYLUN5Y2xlTGVuZ3RoQ29lZmZpY2llbnQJCQk6Oj0gSU5URUdFUiAoNi4uOSkKCkRTQ0gtSUQgOjo9IElOVEVHRVIgKDAuLjI1NSkKCgotLSBFCgpFQVJGQ04tRXh0ZW5kZWQJCTo6PSBJTlRFR0VSICg2NTUzNi4uMjYyMTQzLCAuLi4pCgpFLURDSC1NQUMtZC1GbG93LUlECQk6Oj0gSU5URUdFUiAoMC4uIG1heE5yT2ZFRENITUFDZEZsb3dzLTEpCgpFTkItSUQgOjo9IENIT0lDRSB7CgltYWNyb0VOQi1JRAkJCUJJVCBTVFJJTkcgKFNJWkUoMjApKSwKCWhvbWVFTkItSUQJCQlCSVQgU1RSSU5HIChTSVpFKDI4KSksCgkuLi4sCglzaG9ydC1tYWNyb0VOQi1JRAkJQklUIFNUUklORyAoU0laRSgxOCkpLAoJbG9uZy1tYWNyb0VOQi1JRAkJQklUIFNUUklORyAoU0laRSgyMSkpCgp9CgpFbmNyeXB0aW9uQWxnb3JpdGhtIAkJCTo6PSBJTlRFR0VSIHsgbm8tZW5jcnlwdGlvbiAoMCksIHN0YW5kYXJkLVVNVFMtZW5jcnlwdGlvbi1hbGdvcml0aC1VRUExICgxKSwgc3RhbmRhcmQtVU1UUy1lbmNyeXB0aW9uLWFsZ29yaXRobS1VRUEyICgyKSB9ICgwLi4xNSkKCkVuY3J5cHRpb25JbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewoJcGVybWl0dGVkQWxnb3JpdGhtcwkJUGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXMsCglrZXkJCQkJRW5jcnlwdGlvbktleSwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtFbmNyeXB0aW9uSW5mb3JtYXRpb24tRXh0SUVzfSB9IE9QVElPTkFMCn0KCkVuY3J5cHRpb25JbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKRW5jcnlwdGlvbktleSAJCQkJOjo9IEJJVCBTVFJJTkcgKFNJWkUgKDEyOCkpCi0tIFJlZmVyZW5jZTogMzMuMTAyCgpFbmQtT2YtQ1NGQiA6Oj0gRU5VTUVSQVRFRHsKCWVuZC1vZi1DU0ZCLAoJLi4uCn0KCkVxdWlwbWVudHNUb0JlVHJhY2VkIDo6PSBDSE9JQ0UgewoJaU1FSWxpc3QJCQkJSU1FSUxpc3QsCglpTUVJU1ZsaXN0CQkJCUlNRUlTVkxpc3QsCglpTUVJZ3JvdXAJCQkJSU1FSUdyb3VwLAoJaU1FSVNWZ3JvdXAJCQkJSU1FSVNWR3JvdXAsCgkuLi4KfQoKRS1VVFJBTi1TZXJ2aWNlLUhhbmRvdmVyIDo6PSBFTlVNRVJBVEVEIHsKCWhhbmRvdmVyLXRvLUUtVVRSQU4tc2hhbGwtbm90LWJlLXBlcmZvcm1lZCwKCS4uLgp9CgpFdmVudCA6Oj0gRU5VTUVSQVRFRCB7CglzdG9wLWNoYW5nZS1vZi1zZXJ2aWNlLWFyZWEsCglkaXJlY3QsCgljaGFuZ2Utb2Ytc2VydmljZWFyZWEsCgkuLi4sCglzdG9wLWRpcmVjdCwKCXBlcmlvZGljLAoJc3RvcC1wZXJpb2RpYwp9CgpFdmVudDFGLVBhcmFtZXRlcnMJCTo6PQlTRVFVRU5DRSB7CgltZWFzdXJlbWVudFF1YW50aXR5CQlNZWFzdXJlbWVudFF1YW50aXR5LAoJdGhyZXNob2xkCQkJCUlOVEVHRVIoLTEyMC4uMTY1KSwKCS4uLgp9CgpFdmVudDFJLVBhcmFtZXRlcnMJCTo6PQlTRVFVRU5DRSB7Cgl0aHJlc2hvbGQJCQkJSU5URUdFUigtMTIwLi4tMjUpLAoJLi4uCn0KCkV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGUJCQk6Oj0gSU5URUdFUiAoMTYwMDAwMDEuLjI1NjAwMDAwMCkKLS0gVW5pdCBpcyBiaXRzIHBlciBzZWMKCkV4dGVuZGVkTWF4Qml0cmF0ZQkJCTo6PSBJTlRFR0VSICgxNjAwMDAwMS4uMjU2MDAwMDAwKQotLSBVbml0IGlzIGJpdHMgcGVyIHNlYwoKRXh0ZW5kZWRSTkMtSUQJCQkJCTo6PSBJTlRFR0VSICg0MDk2Li42NTUzNSkKCi0tIEYKCkZyYW1lU2VxdWVuY2VOdW1iZXIJCTo6PQlJTlRFR0VSKDAuLjE1KQoKRnJlcXVlbmNlTGF5ZXJDb252ZXJnZW5jZUZsYWcgOjo9IEVOVU1FUkFURUQgewoJbm8tRkxDLWZsYWcsCgkuLi4KfQoKLS0gRwoKR0FOU1MtUG9zaXRpb25pbmdEYXRhU2V0IDo6PSBTRVFVRU5DRShTSVpFKDEuLm1heEdBTlNTU2V0KSkgT0YgR0FOU1MtUG9zaXRpb25pbmdNZXRob2RBbmRVc2FnZQoKR0FOU1MtUG9zaXRpb25pbmdNZXRob2RBbmRVc2FnZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFKDEpKQoKR2VvZ3JhcGhpY2FsQXJlYSA6Oj0gQ0hPSUNFIHsKCXBvaW50CQkJCUdBLVBvaW50LAoJcG9pbnRXaXRoVW5DZXJ0YWludHkJCUdBLVBvaW50V2l0aFVuQ2VydGFpbnR5LAoJcG9seWdvbgkJCQlHQS1Qb2x5Z29uLAoJLi4uLAoJcG9pbnRXaXRoVW5jZXJ0YWludHlFbGxpcHNlCQlHQS1Qb2ludFdpdGhVbkNlcnRhaW50eUVsbGlwc2UsCglwb2ludFdpdGhBbHRpdHVkZQkJR0EtUG9pbnRXaXRoQWx0aXR1ZGUsCglwb2ludFdpdGhBbHRpdHVkZUFuZFVuY2VydGFpbnR5RWxsaXBzb2lkCQlHQS1Qb2ludFdpdGhBbHRpdHVkZUFuZFVuY2VydGFpbnR5RWxsaXBzb2lkLAoJZWxsaXBzb2lkQXJjCQlHQS1FbGxpcHNvaWRBcmMKfQoKR2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMgOjo9IFNFUVVFTkNFIHsKCWxhdGl0dWRlU2lnbgkJCUVOVU1FUkFURUQgeyBub3J0aCwgc291dGggfSwKCWxhdGl0dWRlCQkJSU5URUdFUiAoMC4uODM4ODYwNyksCglsb25naXR1ZGUJCQlJTlRFR0VSICgtODM4ODYwOC4uODM4ODYwNyksCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7R2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpHQS1BbHRpdHVkZUFuZERpcmVjdGlvbiA6Oj0gU0VRVUVOQ0UgewoJZGlyZWN0aW9uT2ZBbHRpdHVkZQkJRU5VTUVSQVRFRCB7aGVpZ2h0LCBkZXB0aH0sCglhbHRpdHVkZQkJSU5URUdFUiAoMC4uMzI3NjcpLAoJLi4uCn0KCkdBLUVsbGlwc29pZEFyYyA6Oj0gU0VRVUVOQ0UgewoJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJaW5uZXJSYWRpdXMJCQkJCUlOVEVHRVIgKDAuLjY1NTM1KSwKCXVuY2VydGFpbnR5UmFkaXVzCQkJSU5URUdFUiAoMC4uMTI3KSwKCW9mZnNldEFuZ2xlCQkJCQlJTlRFR0VSICgwLi4xNzkpLAoJaW5jbHVkZWRBbmdsZQkJCQlJTlRFR0VSICgwLi4xNzkpLAoJY29uZmlkZW5jZQkJCQkJSU5URUdFUiAoMC4uMTI3KSwKCWlFLUV4dGVuc2lvbnMJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IEdBLUVsbGlwc29pZEFyYy1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKR0EtRWxsaXBzb2lkQXJjLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpHQS1Qb2ludCA6Oj0gU0VRVUVOQ0UgewoJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0dBLVBvaW50LUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpHQS1Qb2ludC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKR0EtUG9pbnRXaXRoQWx0aXR1ZGUgOjo9IFNFUVVFTkNFIHsKCWdlb2dyYXBoaWNhbENvb3JkaW5hdGVzCQlHZW9ncmFwaGljYWxDb29yZGluYXRlcywKCWFsdGl0dWRlQW5kRGlyZWN0aW9uCQlHQS1BbHRpdHVkZUFuZERpcmVjdGlvbiwKCWlFLUV4dGVuc2lvbnMJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IEdBLVBvaW50V2l0aEFsdGl0dWRlLUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpHQS1Qb2ludFdpdGhBbHRpdHVkZS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKR0EtUG9pbnRXaXRoQWx0aXR1ZGVBbmRVbmNlcnRhaW50eUVsbGlwc29pZCA6Oj0gU0VRVUVOQ0UgewoJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJYWx0aXR1ZGVBbmREaXJlY3Rpb24JCUdBLUFsdGl0dWRlQW5kRGlyZWN0aW9uLAoJdW5jZXJ0YWludHlFbGxpcHNlCQkJR0EtVW5jZXJ0YWludHlFbGxpcHNlLAoJdW5jZXJ0YWludHlBbHRpdHVkZQkJCUlOVEVHRVIgKDAuLjEyNyksCgljb25maWRlbmNlCQkJCQlJTlRFR0VSICgwLi4xMjcpLAoJaUUtRXh0ZW5zaW9ucwkJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgR0EtUG9pbnRXaXRoQWx0aXR1ZGVBbmRVbmNlcnRhaW50eUVsbGlwc29pZC1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKR0EtUG9pbnRXaXRoQWx0aXR1ZGVBbmRVbmNlcnRhaW50eUVsbGlwc29pZC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKR0EtUG9pbnRXaXRoVW5DZXJ0YWludHkgOjo9U0VRVUVOQ0UgewoJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0dBLVBvaW50V2l0aFVuQ2VydGFpbnR5LUV4dElFc30gfSBPUFRJT05BTCwKCXVuY2VydGFpbnR5Q29kZQkJCUlOVEVHRVIgKDAuLjEyNykKfQoKR0EtUG9pbnRXaXRoVW5DZXJ0YWludHktRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkdBLVBvaW50V2l0aFVuQ2VydGFpbnR5RWxsaXBzZSA6Oj0gU0VRVUVOQ0UgewoJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJdW5jZXJ0YWludHlFbGxpcHNlCQkJR0EtVW5jZXJ0YWludHlFbGxpcHNlLAoJY29uZmlkZW5jZQkJCQkJSU5URUdFUiAoMC4uMTI3KSwKCWlFLUV4dGVuc2lvbnMJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IEdBLVBvaW50V2l0aFVuQ2VydGFpbnR5RWxsaXBzZS1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKR0EtUG9pbnRXaXRoVW5DZXJ0YWludHlFbGxpcHNlLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpHQS1Qb2x5Z29uIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlBvaW50cykpIE9GCglTRVFVRU5DRSB7CgkJZ2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMJCUdlb2dyYXBoaWNhbENvb3JkaW5hdGVzLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtHQS1Qb2x5Z29uLUV4dElFc30gfSBPUFRJT05BTCwKCQkuLi4KCX0KCkdBLVBvbHlnb24tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkdBLVVuY2VydGFpbnR5RWxsaXBzZSA6Oj0gU0VRVUVOQ0UgewoJdW5jZXJ0YWludHlTZW1pLW1ham9yCQlJTlRFR0VSICgwLi4xMjcpLAoJdW5jZXJ0YWludHlTZW1pLW1pbm9yCQlJTlRFR0VSICgwLi4xMjcpLAoJb3JpZW50YXRpb25PZk1ham9yQXhpcwkJSU5URUdFUiAoMC4uMTc5KSwgCS0tIFRoZSB2YWx1ZXMgOTAuLjE3OSBzaGFsbCBub3QgYmUgdXNlZC4KCS4uLgp9CgpHRVJBTi1CU0MtQ29udGFpbmVyCQkJCTo6PSBPQ1RFVCBTVFJJTkcKCS0tIEdFUkFOIEJTQyBDb250YWluZXIgYXMgZGVmaW5lZCBpbiBUUyA0OC4wMDggWzExXSAtLQoKCkdFUkFOLUNlbGwtSUQgOjo9IFNFUVVFTkNFIHsKCWxBSQkJCQlMQUksCglyQUMJCQkJUkFDLAoJY0kJCQkJQ0ksCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7R0VSQU4tQ2VsbC1JRC1FeHRJRXN9IH0gT1BUSU9OQUwKfQoKR0VSQU4tQ2VsbC1JRC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKR0VSQU4tQ2xhc3NtYXJrCSAJCQkJOjo9IE9DVEVUIFNUUklORwoJLS0gR0VSQU4gQ2xhc3NtYXJrIGFzIGRlZmluZWQgaW4gVFMgNDguMDA4IFsxMV0gLS0KCkdsb2JhbENOLUlEIDo6PSBTRVFVRU5DRSB7CglwTE1OaWRlbnRpdHkJCQkJUExNTmlkZW50aXR5LAoJY04tSUQJCQkJQ04tSUQKfQoKCkdsb2JhbFJOQy1JRCA6Oj0gU0VRVUVOQ0UgewoJcExNTmlkZW50aXR5CQkJCVBMTU5pZGVudGl0eSwKCXJOQy1JRAkJCQlSTkMtSUQKfQoKR1RQLVRFSQkJCQkJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCgpHdWFyYW50ZWVkQml0cmF0ZQkJCTo6PSBJTlRFR0VSICgwLi4xNjAwMDAwMCkKLS0gVW5pdCBpcyBiaXRzIHBlciBzZWMKCi0tIEgKCkhpZ2hlckJpdHJhdGVzVGhhbjE2TWJwc0ZsYWcgOjo9IEVOVU1FUkFURUR7CglhbGxvd2VkLAoJbm90LWFsbG93ZWQsCgkuLi4KfQoKSFMtRFNDSC1NQUMtZC1GbG93LUlECQk6Oj0gSU5URUdFUiAoMC4uIG1heE5yT2ZIU0RTQ0hNQUNkRmxvd3MtMSkKCi0tIEkKCgpJTUVJCQkJCQk6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg4KSkKLS0gUmVmZXJlbmNlOiAyMy4wMDMKCklNRUlHcm91cAk6Oj0gU0VRVUVOQ0UgewoJaU1FSQkJCQlJTUVJLAoJaU1FSU1hc2sJCQlCSVQgU1RSSU5HIChTSVpFICg3KSksCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgSU1FSUdyb3VwLUV4dElFc30gfSBPUFRJT05BTAp9CgpJTUVJR3JvdXAtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCklNRUlMaXN0CTo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlVFc1RvQmVUcmFjZWQpKSBPRiBJTUVJCgpJTUVJU1YJCQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDgpKQotLSBSZWZlcmVuY2U6IDIzLjAwMwoKSU1FSVNWR3JvdXAJOjo9IFNFUVVFTkNFIHsKCWlNRUlTVgkJCQlJTUVJU1YsCglpTUVJU1ZNYXNrCQkJQklUIFNUUklORyAoU0laRSAoNykpLAoJaUUtRXh0ZW5zaW9ucwkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IElNRUlTVkdyb3VwLUV4dElFc30gfSBPUFRJT05BTAp9CgpJTUVJU1ZHcm91cC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKSU1FSVNWTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZVRXNUb0JlVHJhY2VkKSkgT0YgSU1FSVNWCgpJbW1lZGlhdGVNRFQJOjo9IFNFUVVFTkNFIHsKCW1lYXN1cmVtZW50c1RvQWN0aXZhdGUJCU1lYXN1cmVtZW50c1RvQWN0aXZhdGUsCgltMXJlcG9ydAkJCQkJTTFSZXBvcnQJCQkJT1BUSU9OQUwsCgktLSBJbmNsdWRlZCBpbiBjYXNlIG9mIGV2ZW50LXRyaWdnZXJlZCByZXBvcnRpbmcgZm9yIG1lYXN1cmVtZW50IE0xCgltMnJlcG9ydAkJCQkJTTJSZXBvcnQJCQkJT1BUSU9OQUwsCgktLSBJbmNsdWRlZCBpbiBjYXNlIG9mIGV2ZW50LXRyaWdnZXJlZCByZXBvcnRpbmcgZm9yIG1lYXN1cmVtZW50IE0yCgkuLi4sCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgSW1tZWRpYXRlTURULUV4dElFc30gfSBPUFRJT05BTAp9CgpJbW1lZGlhdGVNRFQtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJe0lEIGlkLU00UmVwb3J0CQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIE00UmVwb3J0CQlQUkVTRU5DRSBvcHRpb25hbH18CgktLSBJbmNsdWRlZCBpbiBjYXNlIHRoYXQgbWVhc3VyZW1lbnQgTTQgaXMgYWN0aXZhdGVkCgl7SUQgaWQtTTVSZXBvcnQJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gTTVSZXBvcnQJCVBSRVNFTkNFIG9wdGlvbmFsfXwKCS0tIEluY2x1ZGVkIGluIGNhc2UgdGhhdCBtZWFzdXJlbWVudCBNNSBpcyBhY3RpdmF0ZWQKCXtJRCBpZC1NNlJlcG9ydAkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBNNlJlcG9ydAkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJLS0gSW5jbHVkZWQgaW4gY2FzZSB0aGF0IG1lYXN1cmVtZW50IE02IGlzIGFjdGl2YXRlZAoJe0lEIGlkLU03UmVwb3J0CQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIE03UmVwb3J0CQlQUkVTRU5DRSBvcHRpb25hbH0sCgktLSBJbmNsdWRlZCBpbiBjYXNlIHRoYXQgbWVhc3VyZW1lbnQgTTcgaXMgYWN0aXZhdGVkCgkuLi4KfQoKSU1TSQkJCQkJOjo9IFRCQ0QtU1RSSU5HIChTSVpFICgzLi44KSkKLS0gUmVmZXJlbmNlOiAyMy4wMDMKCkluY2x1ZGVWZWxvY2l0eQkJOjo9IEVOVU1FUkFURUQgewoJcmVxdWVzdGVkCn0KCkluZm9ybWF0aW9uRXhjaGFuZ2VJRCA6Oj0gSU5URUdFUiAoMC4uIDEwNDg1NzUpCgpJbmZvcm1hdGlvbkV4Y2hhbmdlVHlwZSA6Oj0gRU5VTUVSQVRFRCB7Cgl0cmFuc2ZlciwKCXJlcXVlc3QsCgkuLi4KfQoKSW5mb3JtYXRpb25SZXF1ZXN0ZWQgOjo9IENIT0lDRSB7CglyZXF1ZXN0ZWRNQk1TSVBNdWx0aWNhc3RBZGRyZXNzYW5kQVBOUmVxdWVzdAkJUmVxdWVzdGVkTUJNU0lQTXVsdGljYXN0QWRkcmVzc2FuZEFQTlJlcXVlc3QsCglyZXF1ZXN0ZWRNdWx0aWNhc3RTZXJ2aWNlTGlzdAkJCQkJCVJlcXVlc3RlZE11bHRpY2FzdFNlcnZpY2VMaXN0LAoJLi4uCn0KCgpJbmZvcm1hdGlvblJlcXVlc3RUeXBlIDo6PSBDSE9JQ0UgewoJbUJNU0lQTXVsdGljYXN0QWRkcmVzc2FuZEFQTlJlcXVlc3QJCU1CTVNJUE11bHRpY2FzdEFkZHJlc3NhbmRBUE5SZXF1ZXN0LAoJcGVybWFuZW50TkFTLVVFLUlECQkJCQkJUGVybWFuZW50TkFTLVVFLUlELAoJLi4uCn0KCkluZm9ybWF0aW9uVHJhbnNmZXJJRCA6Oj0gSU5URUdFUiAoMC4uIDEwNDg1NzUpCgpJbmZvcm1hdGlvblRyYW5zZmVyVHlwZSA6Oj0gQ0hPSUNFIHsKCXJOQ1RyYWNlSW5mb3JtYXRpb24JCQlSTkNUcmFjZUluZm9ybWF0aW9uLAoJLi4uCn0KCkludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG0JCTo6PSBJTlRFR0VSIHsKCXN0YW5kYXJkLVVNVFMtaW50ZWdyaXR5LWFsZ29yaXRobS1VSUExICgwKSwgc3RhbmRhcmQtVU1UUy1pbnRlZ3JpdHktYWxnb3JpdGhtLVVJQTIgKDEpLAoJbm8tdmFsdWUgKDE1KQp9ICgwLi4xNSkKCkludGVncml0eVByb3RlY3Rpb25JbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewoJcGVybWl0dGVkQWxnb3JpdGhtcwkJUGVybWl0dGVkSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMsCglrZXkJCQkJSW50ZWdyaXR5UHJvdGVjdGlvbktleSwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtJbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24tRXh0SUVzfSB9IE9QVElPTkFMCn0KCkludGVncml0eVByb3RlY3Rpb25JbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKSW50ZWdyaXR5UHJvdGVjdGlvbktleQkJCTo6PSBCSVQgU1RSSU5HIChTSVpFICgxMjgpKQoKSW50ZXJTeXN0ZW1JbmZvcm1hdGlvblRyYW5zZmVyVHlwZSA6Oj0gQ0hPSUNFIHsKCXJJTS1UcmFuc2ZlcgkJCQkJUklNLVRyYW5zZmVyLAoJLi4uCn0KCkludGVyU3lzdGVtSW5mb3JtYXRpb24tVHJhbnNwYXJlbnRDb250YWluZXIgOjo9IFNFUVVFTkNFIHsKCWRvd25saW5rQ2VsbExvYWRJbmZvcm1hdGlvbgkJCUNlbGxMb2FkSW5mb3JtYXRpb24JCU9QVElPTkFMLAoJdXBsaW5rQ2VsbExvYWRJbmZvcm1hdGlvbgkJCUNlbGxMb2FkSW5mb3JtYXRpb24JCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBJbnRlclN5c3RlbUluZm9ybWF0aW9uLVRyYW5zcGFyZW50Q29udGFpbmVyLUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpJbnRlclN5c3RlbUluZm9ybWF0aW9uLVRyYW5zcGFyZW50Q29udGFpbmVyLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLi4uCn0KCklQTXVsdGljYXN0QWRkcmVzcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0Li4xNikpCi0tIFJlZmVyZW5jZTogMjMuMDAzCgpJdVNpZ25hbGxpbmdDb25uZWN0aW9uSWRlbnRpZmllcgk6Oj0gQklUIFNUUklORyAoU0laRSAoMjQpKQoKSXVUcmFuc3BvcnRBc3NvY2lhdGlvbiA6Oj0gQ0hPSUNFIHsKCWdUUC1URUkJCQkJR1RQLVRFSSwKCWJpbmRpbmdJRAkJCUJpbmRpbmdJRCwKCS4uLgp9CgotLSBKCi0tIEsKCktleVN0YXR1cwk6Oj0gRU5VTUVSQVRFRCB7CglvbGQsCgluZXcsCgkuLi4KfQotLSBMCgpMQS1MSVNUIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZkxBcykpIE9GCglTRVFVRU5DRSB7CgkJbEFDCQkJCQkJTEFDLAoJCWxpc3RPRi1TTkFzCQkJCUxpc3RPRi1TTkFzLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgTEEtTElTVC1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCgl9CgpMQS1MSVNULUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpMQUMJCQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoKTEFJIDo6PSBTRVFVRU5DRSB7CglwTE1OaWRlbnRpdHkJCQkJUExNTmlkZW50aXR5LAoJbEFDCQkJCUxBQywKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtMQUktRXh0SUVzfSB9IE9QVElPTkFMCn0KCkxBSS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKTGFzdEtub3duU2VydmljZUFyZWEJOjo9IFNFUVVFTkNFIHsKCXNBSQkJCVNBSSwKCWFnZU9mU0FJCUlOVEVHRVIgKDAuLjMyNzY3KSwKCWlFLUV4dGVuc2lvbnMJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7TGFzdEtub3duU2VydmljZUFyZWEtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkxhc3RLbm93blNlcnZpY2VBcmVhLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpMYXN0VmlzaXRlZFVUUkFOQ2VsbC1JdGVtIDo6PSBTRVFVRU5DRSB7Cgl1VFJBTi1DZWxsSUQJCQkJCVVUUkFOLUNlbGxJRCwKCWNlbGxUeXBlCQkJCQkJQ2VsbFR5cGUsCgl0aW1lLVVFLVN0YXllZEluQ2VsbAkJCVRpbWUtVUUtU3RheWVkSW5DZWxsLAoJaUUtRXh0ZW5zaW9ucwkJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7TGFzdFZpc2l0ZWRVVFJBTkNlbGwtSXRlbS1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKTGFzdFZpc2l0ZWRVVFJBTkNlbGwtSXRlbS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7Ci0tIEV4dGVuc2lvbiBmb3IgUmVsLTExIHRvIHN1cHBvcnQgZW5oYW5jZWQgZ3JhbnVsYXJpdHkgZm9yIHRpbWUgVUUgc3RheWVkIGluIGNlbGwgLS0KCXsgSUQgaWQtVGltZS1VRS1TdGF5ZWRJbkNlbGwtRW5oYW5jZWRHcmFudWxhcml0eQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIFRpbWUtVUUtU3RheWVkSW5DZWxsLUVuaGFuY2VkR3JhbnVsYXJpdHkJCVBSRVNFTkNFCW9wdGlvbmFsIH18Cgl7IElEIGlkLUhPLUNhdXNlCQkJCQkJCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBDYXVzZQkJCQkJCQkJCQkJCQkJUFJFU0VOQ0UJb3B0aW9uYWwgfSwKCS4uLgp9CgpMSE4tSUQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMzIuLjI1NikpCgpMaW5rcy10by1sb2cgOjo9IEVOVU1FUkFURUQge3VwbGluaywgZG93bmxpbmssIGJvdGgtdXBsaW5rLWFuZC1kb3dubGluaywgLi4ufQoKTGlzdE9GLVNOQXMgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mU05BcykpIE9GIFNOQUMKCkxpc3RPZkludGVyZmFjZXNUb1RyYWNlIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZkludGVyZmFjZXMpKSBPRiBJbnRlcmZhY2VzVG9UcmFjZUl0ZW0KCkludGVyZmFjZXNUb1RyYWNlSXRlbSA6Oj0gU0VRVUVOQ0UgewoJaW50ZXJmYWNlCQkJCUVOVU1FUkFURUQge2l1LWNzLCBpdS1wcywgaXVyLCBpdWIsIHV1LCAuLi59LAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0ludGVyZmFjZXNUb1RyYWNlSXRlbS1FeHRJRXN9IH0JT1BUSU9OQUwsCgkuLi4KfQoKSW50ZXJmYWNlc1RvVHJhY2VJdGVtLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpMb2FkVmFsdWUJOjo9IElOVEVHRVIgKDAuLjEwMCkKCkxvY2F0aW9uUmVsYXRlZERhdGFSZXF1ZXN0VHlwZQk6Oj0gU0VRVUVOQ0UgewoJcmVxdWVzdGVkTG9jYXRpb25SZWxhdGVkRGF0YVR5cGUJCQlSZXF1ZXN0ZWRMb2NhdGlvblJlbGF0ZWREYXRhVHlwZSwKCXJlcXVlc3RlZEdQU0Fzc2lzdGFuY2VEYXRhCQkJCQlSZXF1ZXN0ZWRHUFNBc3Npc3RhbmNlRGF0YQlPUFRJT05BTCwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgUmVxdWVzdGVkIExvY2F0aW9uIFJlbGF0ZWQgRGF0YSBUeXBlIElFIGlzIHNldCB0byCRRGVkaWNhdGVkIEFzc2lzdGFuY2UgRGF0YSBmb3IgQXNzaXN0ZWQgR1BTkiBvcgoJLS0gYERlZGljYXRlZCBBc3Npc3RhbmNlIERhdGEgZm9yIEFzc2lzdGVkIEdQUyBhbmQgR0FOU1OSCgkuLi4KfQoKTG9jYXRpb25SZWxhdGVkRGF0YVJlcXVlc3RUeXBlU3BlY2lmaWNUb0dFUkFOSXVNb2RlCTo6PSBFTlVNRVJBVEVEIHsKCWRlY2lwaGVyaW5nS2V5c0VPVEQsCglkZWRpY2F0ZWRNb2JpbGVBc3Npc3RlZEVPVERBc3Npc3RhbmNlRGF0YSwKCWRlZGljYXRlZE1vYmlsZUJhc2VkRU9UREFzc2lzdGFuY2VEYXRhLAoJLi4uCn0KCkxvY2F0aW9uUmVwb3J0aW5nVHJhbnNmZXJJbmZvcm1hdGlvbgk6Oj0JU0VRVUVOQ0UgewoJcmVwb3J0Q2hhbmdlT2ZTQUkJCQkJUmVwb3J0Q2hhbmdlT2ZTQUkJCQlPUFRJT05BTCwKCXBlcmlvZGljUmVwb3J0aW5nSW5kaWNhdG9yCQlQZXJpb2RpY1JlcG9ydGluZ0luZGljYXRvcglPUFRJT05BTCwKCWRpcmVjdFJlcG9ydGluZ0luZGljYXRvcgkJRGlyZWN0UmVwb3J0aW5nSW5kaWNhdG9yCU9QVElPTkFMLAoJdmVydGljYWxBY2N1cmFjeUNvZGUJCQlWZXJ0aWNhbEFjY3VyYWN5Q29kZQkJT1BUSU9OQUwsCglwb3NpdGlvbmluZ1ByaW9yaXR5Q2hhbmdlU0FJCVBvc2l0aW9uaW5nUHJpb3JpdHkJCQlPUFRJT05BTCwKCXBvc2l0aW9uaW5nUHJpb3JpdHlEaXJlY3QJCVBvc2l0aW9uaW5nUHJpb3JpdHkJCQlPUFRJT05BTCwKCWNsaWVudFR5cGVQZXJpb2RpYwkJCQlDbGllbnRUeXBlCQkJCQlPUFRJT05BTCwKCWNsaWVudFR5cGVEaXJlY3QJCQkJQ2xpZW50VHlwZQkJCQkJT1BUSU9OQUwsCglyZXNwb25zZVRpbWUJCQkJCVJlc3BvbnNlVGltZQkJCQlPUFRJT05BTCwKCWluY2x1ZGVWZWxvY2l0eQkJCQkJSW5jbHVkZVZlbG9jaXR5CQkJCU9QVElPTkFMLAoJcGVyaW9kaWNMb2NhdGlvbkluZm8JCQlQZXJpb2RpY0xvY2F0aW9uSW5mbwkJT1BUSU9OQUwsCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgTG9jYXRpb25SZXBvcnRpbmdUcmFuc2ZlckluZm9ybWF0aW9uLUV4dElFcyB9IH0JCU9QVElPTkFMLAoJLi4uCn0KCkxvY2F0aW9uUmVwb3J0aW5nVHJhbnNmZXJJbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKUmVwb3J0Q2hhbmdlT2ZTQUkJCQk6Oj0JRU5VTUVSQVRFRCB7CgkJCQkJCQkJCXJlcXVlc3RlZCwKCQkJCQkJCQkJLi4uCgkJCQkJCQkJfQoKUGVyaW9kaWNSZXBvcnRpbmdJbmRpY2F0b3I6Oj0JRU5VTUVSQVRFRCB7CgkJCQkJCQkJCXBlcmlvZGljU0FJLAoJCQkJCQkJCQlwZXJpb2RpY0dlbywKCQkJCQkJCQkJLi4uCgkJCQkJCQkJfQoKRGlyZWN0UmVwb3J0aW5nSW5kaWNhdG9yOjo9CUVOVU1FUkFURUQgewoJCQkJCQkJCQlkaXJlY3RTQUksCgkJCQkJCQkJCWRpcmVjdEdlbywKCQkJCQkJCQkJLi4uCgkJCQkJCQkJfQoKTDMtSW5mb3JtYXRpb24JCQkJOjo9IE9DVEVUIFNUUklORwoKLS0gTQoKTTFSZXBvcnQJOjo9IENIT0lDRSB7CglwZXJpb2RpYwkJCU1EVC1SZXBvcnQtUGFyYW1ldGVycywKCWV2ZW50MUYJCQkJRXZlbnQxRi1QYXJhbWV0ZXJzLAoJLi4uCn0KCk0yUmVwb3J0CTo6PSBDSE9JQ0UgewoJcGVyaW9kaWMJCQlNRFQtUmVwb3J0LVBhcmFtZXRlcnMsCglldmVudDFJCQkJCUV2ZW50MUktUGFyYW1ldGVycywKCS4uLgp9CgpNNFJlcG9ydAk6Oj0gQ0hPSUNFIHsKCWFsbAkJCQkJCQlOVUxMLAoJbTQtY29sbGVjdGlvbi1wYXJhbWV0ZXJzCU00LUNvbGxlY3Rpb24tUGFyYW1ldGVycywKCS4uLgp9CgpNNC1Db2xsZWN0aW9uLVBhcmFtZXRlcnMgOjo9IFNFUVVFTkNFIHsKCW00LXBlcmlvZAkJTTQtUGVyaW9kLAoJbTQtdGhyZXNob2xkCU00LVRocmVzaG9sZAlPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IE00LUNvbGxlY3Rpb24tUGFyYW1ldGVycy1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKTTQtQ29sbGVjdGlvbi1QYXJhbWV0ZXJzLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpNNC1QZXJpb2QgIDo6PSBFTlVNRVJBVEVEIHttczEwMCwgbXMyNTAsIG1zNTAwLCBtczEwMDAsIG1zMjAwMCwgbXMzMDAwLCBtczQwMDAsIG1zNjAwMCwgLi4ufQoKCk00LVRocmVzaG9sZCA6Oj0gSU5URUdFUiAoMC4uMzEpCgoKTTVSZXBvcnQJOjo9IENIT0lDRSB7Cgl3aGVuLWF2YWlsYWJsZQkJTlVMTCwKCW01LXBlcmlvZAkJCU01LVBlcmlvZCwKCS4uLgp9Ck01LVBlcmlvZCA6Oj0gRU5VTUVSQVRFRCB7bXMxMDAsIG1zMjUwLCBtczUwMCwgbXMxMDAwLCBtczIwMDAsIG1zMzAwMCwgbXM0MDAwLCBtczYwMDAsIC4uLn0KCgoKTTZSZXBvcnQgOjo9IFNFUVVFTkNFIHsKCW02LXBlcmlvZAkJCU02LVBlcmlvZCwKCW02LWxpbmtzLXRvLWxvZwkJTGlua3MtdG8tbG9nLAoJaUUtRXh0ZW5zaW9ucwkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IE02UmVwb3J0LUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpNNlJlcG9ydC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKTTYtUGVyaW9kIDo6PSBFTlVNRVJBVEVEIHttczEwMDAsIG1zMjAwMCwgbXMzMDAwLCBtczQwMDAsIG1zNjAwMCwgbXM4MDAwLCBtczEyMDAwLCBtczE2MDAwLCBtczIwMDAwLCBtczI0MDAwLCBtczI4MDAwLCBtczMyMDAwLCBtczY0MDAwLCAuLi59CgpNN1JlcG9ydCA6Oj0gU0VRVUVOQ0UgewoJbTctcGVyaW9kCQkJTTctUGVyaW9kLAoJbTctbGlua3MtdG8tbG9nCQlMaW5rcy10by1sb2csCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgTTdSZXBvcnQtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCk03UmVwb3J0LUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpNNy1QZXJpb2QgOjo9IEVOVU1FUkFURUQge21zMTAwMCwgbXMyMDAwLCBtczMwMDAsIG1zNDAwMCwgbXM2MDAwLCBtczgwMDAsIG1zMTIwMDAsIG1zMTYwMDAsIG1zMjAwMDAsIG1zMjQwMDAsIG1zMjgwMDAsIG1zMzIwMDAsIG1zNjQwMDAsIC4uLn0KCk1hbmFnZW1lbnQtQmFzZWQtTURULUFsbG93ZWQgOjo9IEVOVU1FUkFURUQgewoJYWxsb3dlZCwgLi4uIH0KCk1heEJpdHJhdGUJCQkJOjo9IElOVEVHRVIgKDEuLjE2MDAwMDAwKQotLSBVbml0IGlzIGJpdHMgcGVyIHNlYwoKTWF4U0RVLVNpemUJCQkJOjo9IElOVEVHRVIgKDAuLjMyNzY4KQotLSBNYXhTRFUtU2l6ZQotLSBVbml0IGlzIGJpdAoKTUJNUy1QVFAtUkFCLUlEIDo6PSBCSVQgU1RSSU5HIChTSVpFICg4KSkKCk1CTVNCZWFyZXJTZXJ2aWNlVHlwZSA6Oj0gRU5VTUVSQVRFRCB7CgltdWx0aWNhc3QsCglicm9hZGNhc3QsCgkuLi4KfQoKTUJNU0NORGUtUmVnaXN0cmF0aW9uIDo6PSBFTlVNRVJBVEVEIHsKCW5vcm1hbHNlc3Npb25zdG9wLAoJZGVyZWdpc3RlciwKCS4uLgp9CgoKTUJNU0NvdW50aW5nSW5mb3JtYXRpb24gOjo9IEVOVU1FUkFURUQgewoJY291bnRpbmcsCglub3Rjb3VudGluZywKCS4uLgp9CgpNQk1TSENJbmRpY2F0b3IgOjo9IEVOVU1FUkFURUQgewoJdW5jb21wcmVzc2VkLWhlYWRlciwKCWNvbXByZXNzZWQtaGVhZGVyLAoJLi4uCn0KCk1CTVNJUE11bHRpY2FzdEFkZHJlc3NhbmRBUE5SZXF1ZXN0IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4bm9vZk11bHRpY2FzdFNlcnZpY2VzUGVyUk5DKSkgT0YKCVRNR0kKCk1CTVNMaW5raW5nSW5mb3JtYXRpb24gOjo9IEVOVU1FUkFURUQgewoJdUUtaGFzLWpvaW5lZC1tdWx0aWNhc3Qtc2VydmljZXMsCgkuLi4KfQoKTUJNU1JlZ2lzdHJhdGlvblJlcXVlc3RUeXBlIDo6PSBFTlVNRVJBVEVEIHsKCXJlZ2lzdGVyLAoJZGVyZWdpc3RlciwKCS4uLgp9CgpNQk1TU2VydmljZUFyZWEgOjo9IE9DVEVUIFNUUklORwoKTUJNU1Nlc3Npb25EdXJhdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKCgoKTUJNU1Nlc3Npb25JZGVudGl0eSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCk1CTVNTZXNzaW9uUmVwZXRpdGlvbk51bWJlciA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCk1EVC1BY3RpdmF0aW9uCQk6Oj0JRU5VTUVSQVRFRCB7IGltbWVkaWF0ZU1EVG9ubHksCgkJCQkJCQkJCSBsb2dnZWRNRFRvbmx5LAoJCQkJCQkJCQkgaW1tZWRpYXRlTURUYW5kVHJhY2UsCgkJCQkJCQkJCS4uLiB9CgpNRFRBcmVhU2NvcGUJCTo6PQlDSE9JQ0UgewoJY2VsbGJhc2VkCQkJQ2VsbEJhc2VkLAoJbGFiYXNlZAkJCQlMQUJhc2VkLAoJcmFiYXNlZAkJCQlSQUJhc2VkLAoJcGxtbi1hcmVhLWJhc2VkCQlOVUxMLAoJLi4uCn0KCk1EVC1Db25maWd1cmF0aW9uCTo6PSBTRVFVRU5DRSB7CgkJbWR0QWN0aXZhdGlvbgkJCQkJTURULUFjdGl2YXRpb24sCgkJbWR0QXJlYVNjb3BlCQkJCQlNRFRBcmVhU2NvcGUsCgkJbWR0TW9kZQkJCQkJCQlNRFRNb2RlLAoJCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBNRFQtQ29uZmlndXJhdGlvbi1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCn0KCk1EVC1Db25maWd1cmF0aW9uLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCXsgSUQgaWQtU2lnbmFsbGluZ0Jhc2VkTURUUExNTkxpc3QJCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBNRFQtUExNTi1MaXN0CQlQUkVTRU5DRSBvcHRpb25hbCB9LAouLi4KfQoKTURUTW9kZSA6Oj0gQ0hPSUNFIHsKCWltbWVkaWF0ZU1EVAkJSW1tZWRpYXRlTURULAoJbG9nZ2VkTURUCQkJTG9nZ2VkTURULAoJLi4uCn0KCk1EVC1QTE1OLUxpc3QgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhub29mTURUUExNTnMpKSBPRgoJUExNTmlkZW50aXR5CgpNRFQtUmVwb3J0LVBhcmFtZXRlcnMgOjo9IFNFUVVFTkNFIHsKCXJlcG9ydEludGVydmFsCQkJUmVwb3J0SW50ZXJ2YWwsCglyZXBvcnRBbW91bnQJCQlSZXBvcnRBbW91bnQsCgkuLi4KfQoKTWVhc3VyZW1lbnRRdWFudGl0eSA6Oj0gRU5VTUVSQVRFRCB7CgkJY3BpY2hFY05vLAoJCWNwaWNoUlNDUCwKCQlwYXRobG9zcywKCQkuLi4KfQoKTWVhc3VyZW1lbnRzVG9BY3RpdmF0ZTo6PSBCSVQgU1RSSU5HIChTSVpFICg4KSkKCk1TSVNETiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi45KSkKCi0tIE4KCgpOQVMtUERVIDo6PSBPQ1RFVCBTVFJJTkcKCk5BUy1TZXF1ZW5jZU51bWJlciA6Oj0gQklUIFNUUklORyAoU0laRSAoMikpCi0tIFJlZmVyZW5jZTogMjQuMDA4CgpOQVMtU3luY2hyb25pc2F0aW9uSW5kaWNhdG9yIDo6PSBCSVQgU1RSSU5HIChTSVpFICg0KSkKCk5ld0JTUy1Uby1PbGRCU1MtSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORwoKTm9uU2VhcmNoaW5nSW5kaWNhdGlvbiA6Oj0gRU5VTUVSQVRFRCB7Cglub24tc2VhcmNoaW5nLAoJc2VhcmNoaW5nCn0KCk5SVExvYWRJbmZvcm1hdGlvblZhbHVlIDo6PSBJTlRFR0VSICgwLi4zKQoKTnVsbC1OUkkgOjo9IEJJVCBTVFJJTkcgKFNJWkUgKDEwKSkKCk51bWJlck9mSXVJbnN0YW5jZXMgOjo9IElOVEVHRVIgKDEuLjIpCgpOdW1iZXJPZlN0ZXBzIDo6PSBJTlRFR0VSICgxLi4xNikKCi0tIE8KCk9mZmxvYWQtUkFCLVBhcmFtZXRlcnMgOjo9IFNFUVVFTkNFIHsKCWFjY2Vzc1BvaW50TmFtZQkJCQlPZmZsb2FkLVJBQi1QYXJhbWV0ZXJzLUFQTiwKCWNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzCQlPZmZsb2FkLVJBQi1QYXJhbWV0ZXJzLUNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzLAoJaUUtRXh0ZW5zaW9ucwkJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgT2ZmbG9hZC1SQUItUGFyYW1ldGVycy1FeHRJRXN9IH0gCU9QVElPTkFMLAoJLi4uCn0KCk9mZmxvYWQtUkFCLVBhcmFtZXRlcnMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCk9mZmxvYWQtUkFCLVBhcmFtZXRlcnMtQVBOIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjI1NSkpCgpPZmZsb2FkLVJBQi1QYXJhbWV0ZXJzLUNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoKT2xkQlNTLVRvTmV3QlNTLUluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcKCk9NQy1JRAkJCQkJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMy4uMjIpKQotLSBSZWZlcmVuY2U6IEdTTSBUUyAxMi4yMCBbMjVdCgpPdXQtT2YtVVRSQU4gOjo9IEVOVU1FUkFURUR7CgljZWxsLXJlc2VsZWN0aW9uLXRvLUVVVFJBTiwKCS4uLgp9CgotLSBQCgpQYWdpbmdBcmVhSUQgOjo9IENIT0lDRSB7CglsQUkJCQkJTEFJLAoJckFJCQkJCVJBSSwKCS4uLgp9CgpQYWdpbmdDYXVzZSA6Oj0gRU5VTUVSQVRFRCB7Cgl0ZXJtaW5hdGluZy1jb252ZXJzYXRpb25hbC1jYWxsLAoJdGVybWluYXRpbmctc3RyZWFtaW5nLWNhbGwsCgl0ZXJtaW5hdGluZy1pbnRlcmFjdGl2ZS1jYWxsLAoJdGVybWluYXRpbmctYmFja2dyb3VuZC1jYWxsLAoJdGVybWluYXRpbmctbG93LXByaW9yaXR5LXNpZ25hbGxpbmcsCgkuLi4sCgl0ZXJtaW5hdGluZy1oaWdoLXByaW9yaXR5LXNpZ25hbGxpbmcKfQoKUERQLVR5cGVJbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZQRFBEaXJlY3Rpb25zKSkgT0YKCVBEUC1UeXBlCgpQRFAtVHlwZSA6Oj0gRU5VTUVSQVRFRCB7CgllbXB0eSwKCXBwcCwKCW9zcC1paG9zcwktLSB0aGlzIHZhbHVlIHNoYWxsIG5vdCBiZSB1c2VkIC0tICwKCWlwdjQsCglpcHY2LAoJLi4uCn0KUERQLVR5cGVJbmZvcm1hdGlvbi1leHRlbnNpb24gOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mUERQRGlyZWN0aW9ucykpIE9GCglQRFAtVHlwZS1leHRlbnNpb24KClBEUC1UeXBlLWV4dGVuc2lvbiA6Oj0gRU5VTUVSQVRFRCB7CglpcHY0LWFuZC1pcHY2LAoJLi4uCn0KClBEVVR5cGUxNEZyYW1lU2VxdWVuY2VOdW1iZXIJCTo6PQlJTlRFR0VSKDAuLjMpCgpQZXJpb2RpY0xvY2F0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgewoJcmVwb3J0aW5nQW1vdW50CQkJCUlOVEVHRVIgKDEuLjg2Mzk5OTksIC4uLiksCglyZXBvcnRpbmdJbnRlcnZhbAkJCUlOVEVHRVIgKDEuLjg2Mzk5OTksIC4uLiksCglpRS1FeHRlbnNpb25zCQkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBQZXJpb2RpY0xvY2F0aW9uSW5mby1FeHRJRXMgfSB9CU9QVElPTkFMLAoJLi4uCn0KClBlcmlvZGljTG9jYXRpb25JbmZvLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgoKUGVybWFuZW50TkFTLVVFLUlEIDo6PSBDSE9JQ0UgewoJaU1TSQkJCQlJTVNJLAoJLi4uCn0KClBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4uMTYpKSBPRgoJRW5jcnlwdGlvbkFsZ29yaXRobQoKUGVybWl0dGVkSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMgOjo9IFNFUVVFTkNFIChTSVpFICgxLi4xNikpIE9GCglJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtCgpMQUJhc2VkCTo6PSBTRVFVRU5DRSB7CglsYWlMaXN0CQkJTEFJLUxpc3QsCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtMQUJhc2VkLUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpMQUJhc2VkLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgoKTEFJLUxpc3QJOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mTEFJcykpIE9GCglMQUkKCgoKTG9nZ2VkTURUCTo6PQlTRVFVRU5DRSB7Cglsb2dnaW5nSW50ZXJ2YWwJCUxvZ2dpbmdJbnRlcnZhbCwKCWxvZ2dpbmdEdXJhdGlvbgkJTG9nZ2luZ0R1cmF0aW9uLAoJaUUtRXh0ZW5zaW9ucwkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7TG9nZ2VkTURULUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpMb2dnZWRNRFQtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkxvZ2dpbmdJbnRlcnZhbAk6Oj0JRU5VTUVSQVRFRCB7CglzMWQyOCwKCXMyZDU2LAoJczVkMTIsCglzMTBkMjQsCglzMjBkNDgsCglzMzBkNzIsCglzNDBkOTYsCglzNjFkNDQsCgkuLi4KCX0KCkxvZ2dpbmdEdXJhdGlvbgk6Oj0JRU5VTUVSQVRFRCB7CgkJbWluMTAsCgkJbWluMjAsCgkJbWluNDAsCgkJbWluNjAsCgkJbWluOTAsCgkJbWluMTIwLAouLi59CgoKClBMTU5CYXNlZDo6PSBTRVFVRU5DRSB7CglwbG1uTGlzdAkJCQlQTE1OTGlzdCwKCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1BMTU5CYXNlZC1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKUExNTkJhc2VkLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpQTE1OTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLiBtYXhub29mUExNTnMpKSBPRgoJUExNTmlkZW50aXR5CgoKClBMTU5pZGVudGl0eSAJCQkJOjo9IFRCQ0QtU1RSSU5HIChTSVpFICgzKSkKClBMTU5zLWluLXNoYXJlZC1uZXR3b3JrIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlBMTU5zU04pKSBPRgoJU0VRVUVOQ0UgewoJCXBMTU5pZGVudGl0eQkJCVBMTU5pZGVudGl0eSwKCQlsQS1MSVNUCQkJCQlMQS1MSVNULAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgUExNTnMtaW4tc2hhcmVkLW5ldHdvcmstRXh0SUVzfSB9IE9QVElPTkFMLAoJCS4uLgoJfQoKUExNTnMtaW4tc2hhcmVkLW5ldHdvcmstRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClBvcnQtTnVtYmVyIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoKUG9zaXRpb25pbmdEYXRhRGlzY3JpbWluYXRvciA6Oj0gQklUIFNUUklORyAoU0laRSg0KSkKClBvc2l0aW9uaW5nRGF0YVNldCA6Oj0gU0VRVUVOQ0UoU0laRSgxLi5tYXhTZXQpKSBPRiBQb3NpdGlvbmluZ01ldGhvZEFuZFVzYWdlCgpQb3NpdGlvbmluZ01ldGhvZEFuZFVzYWdlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUoMSkpCgpQb3NpdGlvbmluZ1ByaW9yaXR5CTo6PSBFTlVNRVJBVEVEIHsKCWhpZ2gtUHJpb3JpdHksCglub3JtYWwtUHJpb3JpdHksCi4uLgp9CgpQb3NpdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKCXBvc2l0aW9uaW5nRGF0YURpc2NyaW1pbmF0b3IJCVBvc2l0aW9uaW5nRGF0YURpc2NyaW1pbmF0b3IsCglwb3NpdGlvbmluZ0RhdGFTZXQJCQkJCVBvc2l0aW9uaW5nRGF0YVNldAkJCU9QVElPTkFMLAotLSBUaGlzIElFIHNoYWxsIGJlIHByZXNlbnQgaWYgdGhlIFBvc2l0aW9uaW5nRGF0YURpc2NyaW1pbmF0b3IgSUUgaXMgc2V0IHRvIHRoZSB2YWx1ZSAiMDAwMCIgLS0KCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1Bvc2l0aW9uRGF0YS1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKUG9zaXRpb25EYXRhLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCXsgSUQgaWQtR0FOU1MtUG9zaXRpb25pbmdEYXRhU2V0CQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBHQU5TUy1Qb3NpdGlvbmluZ0RhdGFTZXQJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJeyBJRCBpZC1BZGRpdGlvbmFsLVBvc2l0aW9uaW5nRGF0YVNldAkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBBZGRpdGlvbmFsLVBvc2l0aW9uaW5nRGF0YVNldAkJUFJFU0VOQ0Ugb3B0aW9uYWx9LAoJLi4uCn0KClBvc2l0aW9uRGF0YVNwZWNpZmljVG9HRVJBTkl1TW9kZSA6Oj0gT0NURVQgU1RSSU5HCgpQcmUtZW1wdGlvbkNhcGFiaWxpdHkgOjo9IEVOVU1FUkFURUQgewoJc2hhbGwtbm90LXRyaWdnZXItcHJlLWVtcHRpb24sCgltYXktdHJpZ2dlci1wcmUtZW1wdGlvbgp9CgpQcmUtZW1wdGlvblZ1bG5lcmFiaWxpdHkgOjo9IEVOVU1FUkFURUQgewoJbm90LXByZS1lbXB0YWJsZSwKCXByZS1lbXB0YWJsZQp9CgpQcmlvcml0eUxldmVsCQkJCTo6PSBJTlRFR0VSIHsgc3BhcmUgKDApLCBoaWdoZXN0ICgxKSwgbG93ZXN0ICgxNCksIG5vLXByaW9yaXR5ICgxNSkgfSAoMC4uMTUpCgpQcmlvcml0eS1DbGFzcy1JbmRpY2F0b3IgOjo9IEJJVCBTVFJJTkcgKFNJWkUoOCkpCgpQcm92aWRlZERhdGEgOjo9IENIT0lDRSB7CglzaGFyZWQtbmV0d29yay1pbmZvcm1hdGlvbgkJCQlTaGFyZWQtTmV0d29yay1JbmZvcm1hdGlvbiwKCS4uLgp9CgpQb3dlclNhdmluZ0luZGljYXRvciA6Oj0gRU5VTUVSQVRFRCB7Cglwc21Db25maWd1cmVkLAoJZURSWENvbmZpZ3VyZWQsCgkuLi4KfQoKUC1UTVNJCQkJCQk6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0KSkKCi0tIFEKClF1ZXVpbmdBbGxvd2VkIDo6PSBFTlVNRVJBVEVEIHsKCXF1ZXVlaW5nLW5vdC1hbGxvd2VkLAoJcXVldWVpbmctYWxsb3dlZAp9CgotLSBSClJBQi1Bc3ltbWV0cnlJbmRpY2F0b3I6Oj0gRU5VTUVSQVRFRCB7CglzeW1tZXRyaWMtYmlkaXJlY3Rpb25hbCwKCWFzeW1tZXRyaWMtdW5pZGlyZWN0aW9uYWwtZG93bmxpbmssCglhc3ltbWV0cmljLXVuaWRpcmVjdGlvbmFsLXVwbGluaywKCWFzeW1tZXRyaWMtYmlkaXJlY3Rpb25hbCwKCS4uLgp9CgpSQUJhc2VkCTo6PSBTRVFVRU5DRSB7CglyYWlMaXN0CQkJUkFJLUxpc3QsCglpRS1FeHRlbnNpb25zCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1JBQmFzZWQtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KClJBQmFzZWQtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCgpSQUktTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZSQUlzKSkgT0YKCVJBSQoKUkFCRGF0YVZvbHVtZVJlcG9ydCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZWb2wpKSBPRgoJU0VRVUVOQ0UgewoJCWRsLVVuc3VjY2Vzc2Z1bGx5VHJhbnNtaXR0ZWREYXRhVm9sdW1lCVVuc3VjY2Vzc2Z1bGx5VHJhbnNtaXR0ZWREYXRhVm9sdW1lLAoJCWRhdGFWb2x1bWVSZWZlcmVuY2UJCQkJCQlEYXRhVm9sdW1lUmVmZXJlbmNlCU9QVElPTkFMLAoJCWlFLUV4dGVuc2lvbnMJCQkJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7UkFCRGF0YVZvbHVtZVJlcG9ydC1FeHRJRXN9IH0JCU9QVElPTkFMLAoJCS4uLgoJfQoKUkFCRGF0YVZvbHVtZVJlcG9ydC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKUkFCLUlECQkJCQk6Oj0gQklUIFNUUklORyAoU0laRSAoOCkpCgpSQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CTo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBFeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlCgpSQUItUGFyYW1ldGVyLUV4dGVuZGVkTWF4Qml0cmF0ZUxpc3QJCTo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBFeHRlbmRlZE1heEJpdHJhdGUKCgpSQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgR3VhcmFudGVlZEJpdHJhdGUKLS1UaGlzIElFIHNoYWxsIGJlIGlnbm9yZWQgaWYgU3VwcG9ydGVkIEd1YXJhbnRlZWQgQml0IHJhdGUgaXMgcHJlc2VudC0tCgpSQUItUGFyYW1ldGVyLU1heEJpdHJhdGVMaXN0CQk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgTWF4Qml0cmF0ZQotLVRoaXMgSUUgc2hhbGwgYmUgaWdub3JlZCBpZiBTdXBwb3J0ZWQgTWF4aW11bSBCaXQgcmF0ZSBpcyBwcmVzZW50LS0KClJBQi1QYXJhbWV0ZXJzIDo6PSBTRVFVRU5DRSB7Cgl0cmFmZmljQ2xhc3MJCQlUcmFmZmljQ2xhc3MsCglyQUItQXN5bW1ldHJ5SW5kaWNhdG9yCQkJUkFCLUFzeW1tZXRyeUluZGljYXRvciwKCW1heEJpdHJhdGUJCQlSQUItUGFyYW1ldGVyLU1heEJpdHJhdGVMaXN0LAoJZ3VhcmFudGVlZEJpdFJhdGUJCVJBQi1QYXJhbWV0ZXItR3VhcmFudGVlZEJpdHJhdGVMaXN0IE9QVElPTkFMCgktLSBUaGlzIElFIHNoYWxsIGJlIHByZXNlbnQgdGhlIHRyYWZmaWMgY2xhc3MgSUUgaXMgc2V0IHRvICJDb252ZXJzYXRpb25hbCIgb3IgIlN0cmVhbWluZyIgLS0sCglkZWxpdmVyeU9yZGVyCQkJRGVsaXZlcnlPcmRlciwKCW1heFNEVS1TaXplCQkJTWF4U0RVLVNpemUsCglzRFUtUGFyYW1ldGVycwkJCVNEVS1QYXJhbWV0ZXJzLAoJdHJhbnNmZXJEZWxheQkJCVRyYW5zZmVyRGVsYXkgT1BUSU9OQUwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCB0aGUgdHJhZmZpYyBjbGFzcyBJRSBpcyBzZXQgdG8gIkNvbnZlcnNhdGlvbmFsIiBvciAiU3RyZWFtaW5nIiAtLSwKCXRyYWZmaWNIYW5kbGluZ1ByaW9yaXR5CQlUcmFmZmljSGFuZGxpbmdQcmlvcml0eSBPUFRJT05BTAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IHRoZSB0cmFmZmljIGNsYXNzIElFIGlzIHNldCB0byAiSW50ZXJhY3RpdmUiIC0tLAoJYWxsb2NhdGlvbk9yUmV0ZW50aW9uUHJpb3JpdHkJQWxsb2NhdGlvbk9yUmV0ZW50aW9uUHJpb3JpdHkgT1BUSU9OQUwsCglzb3VyY2VTdGF0aXN0aWNzRGVzY3JpcHRvcglTb3VyY2VTdGF0aXN0aWNzRGVzY3JpcHRvciBPUFRJT05BTAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IHRoZSB0cmFmZmljIGNsYXNzIElFIGlzIHNldCB0byAiQ29udmVyc2F0aW9uYWwiIG9yICJTdHJlYW1pbmciIC0tLAoJcmVsb2NhdGlvblJlcXVpcmVtZW50CVJlbG9jYXRpb25SZXF1aXJlbWVudCBPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtSQUItUGFyYW1ldGVycy1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKUkFCLVBhcmFtZXRlcnMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNSB0byBlbmFibGUgaW5kaWNhdGlvbiB0aGF0IEludGVyYWN0aXZlIFVzZXIgUGxhbmUgZGF0YSBpcyBvZiBhIHNpZ25hbGxpbmcgbmF0dXJlIC0tCgl7IElEIGlkLVNpZ25hbGxpbmdJbmRpY2F0aW9uCUNSSVRJQ0FMSVRZIGlnbm9yZQkJRVhURU5TSU9OIFNpZ25hbGxpbmdJbmRpY2F0aW9uCQlQUkVTRU5DRSBvcHRpb25hbCB9fAotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNyB0byBpbmRpY2F0ZSBhbiBFeHRlbmRlZCBHdWFyYW50ZWVkIEJpdHJhdGUgLS0KeyBJRCBpZC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CUNSSVRJQ0FMSVRZIHJlamVjdAkJRVhURU5TSU9OIFJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QJCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA3IHRvIGluZGljYXRlIGFuIEV4dGVuZGVkIE1heGltdW0gQml0cmF0ZSAtLQp7IElEIGlkLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdAlDUklUSUNBTElUWSByZWplY3QJCUVYVEVOU0lPTiBSQUItUGFyYW1ldGVyLUV4dGVuZGVkTWF4Qml0cmF0ZUxpc3QJCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIGluZGljYXRlIGFuIFN1cHBvcnRlZCBNYXhpbXVtIEJpdHJhdGUgLS0KeyBJRCBpZC1SQUItUGFyYW1ldGVyLVN1cHBvcnRlZE1heEJpdHJhdGVMaXN0CUNSSVRJQ0FMSVRZIHJlamVjdAkJRVhURU5TSU9OIFN1cHBvcnRlZFJBQi1QYXJhbWV0ZXJCaXRyYXRlTGlzdAkJUFJFU0VOQ0Ugb3B0aW9uYWwgfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDggdG8gaW5kaWNhdGUgYW4gU3VwcG9ydGVkIEd1YXJhbnRlZWQgQml0cmF0ZSAtLQp7IElEIGlkLVJBQi1QYXJhbWV0ZXItU3VwcG9ydGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CUNSSVRJQ0FMSVRZIHJlamVjdAkJRVhURU5TSU9OIFN1cHBvcnRlZFJBQi1QYXJhbWV0ZXJCaXRyYXRlTGlzdAkJUFJFU0VOQ0Ugb3B0aW9uYWwgfSwKCS4uLgp9CgpSQUJQYXJhbWV0ZXJzTGlzdAk6Oj0JU0VRVUVOQ0UgKFNJWkUgKDEuLiBtYXhOck9mUkFCcykpIE9GIFNFUVVFTkNFCXsKCXJhYi1JZAkJCQkJUkFCLUlELAoJY24tZG9tYWluCQkJCUNOLURvbWFpbkluZGljYXRvciwKCXJhYkRhdGFWb2x1bWVSZXBvcnQJCVJBQkRhdGFWb2x1bWVSZXBvcnQJT1BUSU9OQUwsCgl1cEluZm9ybWF0aW9uCQkJVVBJbmZvcm1hdGlvbglPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgUkFCUGFyYW1ldGVyc0xpc3QtRXh0SUVzIH0gfQkJT1BUSU9OQUwsCgkuLi4KfQoKUkFCUGFyYW1ldGVyc0xpc3QtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClJBQi1TdWJmbG93Q29tYmluYXRpb25CaXRSYXRlIAk6Oj0gSU5URUdFUiAoMC4uMTYwMDAwMDApCgpSQUItVHJDSC1NYXBwaW5nIDo6PQlTRVFVRU5DRSAoIFNJWkUgKDEuLm1heE5yT2ZSQUJzKSkgT0YKCVJBQi1UckNILU1hcHBpbmdJdGVtCgpSQUItVHJDSC1NYXBwaW5nSXRlbSA6Oj0gU0VRVUVOQ0UgewoJckFCLUlECQkJUkFCLUlELAoJdHJDSC1JRC1MaXN0CVRyQ0gtSUQtTGlzdCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgUkFCLVRyQ0gtTWFwcGluZ0l0ZW0tRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KClJBQi1UckNILU1hcHBpbmdJdGVtLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDk5IHRvIGVuYWJsZSB0cmFuc2ZlciBvZiBSQUIgU3ViZmxvdyBtYXBwaW5nIG9udG8gSXVyIHRyYW5zcG9ydCBjaGFubmVsIElkcyBmb3IgYSBnaXZlbiBpbmRpY2F0ZWQgZG9tYWluIC0tCgl7CUlEIGlkLUNOLURvbWFpbkluZGljYXRvcglDUklUSUNBTElUWSBpZ25vcmUJCUVYVEVOU0lPTiBDTi1Eb21haW5JbmRpY2F0b3IJUFJFU0VOQ0Ugb3B0aW9uYWwJfSwKCS4uLgp9CgpSQUMJCQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoKUkFJIDo6PSBTRVFVRU5DRSB7CglsQUkJCQkJTEFJLAoJckFDCQkJCVJBQywKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtSQUktRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KClJBSS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKUkFMaXN0b2ZJZGxlTW9kZVVFcyA6Oj0gQ0hPSUNFIHsKCW5vdEVtcHR5UkFMaXN0b2ZJZGxlTW9kZVVFcwkJCU5vdEVtcHR5UkFMaXN0b2ZJZGxlTW9kZVVFcywKCWVtcHR5RnVsbFJBTGlzdG9mSWRsZU1vZGVVRXMJCQlFTlVNRVJBVEVEIHtlbXB0eWxpc3QsZnVsbGxpc3QsLi4ufSwKCS4uLgp9CgpOb3RFbXB0eVJBTGlzdG9mSWRsZU1vZGVVRXMgOjo9IFNFUVVFTkNFIHsKCXJBb2ZJZGxlTW9kZVVFcwkJCVJBb2ZJZGxlTW9kZVVFcywKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtOb3RFbXB0eVJBTGlzdG9mSWRsZU1vZGVVRXMtRXh0SUVzfSB9IE9QVElPTkFMCn0KClJBb2ZJZGxlTW9kZVVFcyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE1CTVNSQSkpIE9GCglSQUMKCk5vdEVtcHR5UkFMaXN0b2ZJZGxlTW9kZVVFcy1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CnsgSUQgaWQtTEFvZklkbGVNb2RlVUVzCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIExBTGlzdG9mSWRsZU1vZGVVRXMgUFJFU0VOQ0UgY29uZGl0aW9uYWwgfSwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgUkEgb2YgSWRsZSBNb2RlIFVFcyBJRSBpcyBpbmNsdWRlZC4gLS0KCS4uLgp9CgpMQUxpc3RvZklkbGVNb2RlVUVzIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TUJNU1JBKSkgT0YKCUxBSQoKUkFULVR5cGUgOjo9IEVOVU1FUkFURUQgewoJdXRyYW4sCglnZXJhbiwKCS4uLgp9CgpSYXRlQ29udHJvbEFsbG93ZWQgOjo9IEVOVU1FUkFURUQgewoJbm90LWFsbG93ZWQsCglhbGxvd2VkCn0KClJlZGlyZWN0QXR0ZW1wdEZsYWcgCTo6PSBOVUxMCgpSZWRpcmVjdGlvbkNvbXBsZXRlZAk6Oj0gRU5VTUVSQVRFRCB7CglyZWRpcmVjdGlvbi1jb21wbGV0ZWQsCgkuLi4KfQoKUmVqZWN0Q2F1c2VWYWx1ZSA6Oj0gRU5VTUVSQVRFRCB7CglwTE1OLU5vdC1BbGxvd2VkLAoJbG9jYXRpb24tQXJlYS1Ob3QtQWxsb3dlZCwKCXJvYW1pbmctTm90LUFsbG93ZWQtSW4tVGhpcy1Mb2NhdGlvbi1BcmVhLAoJbm8tU3VpdGFibGUtQ2VsbC1Jbi1Mb2NhdGlvbi1BcmVhLAoJZ1BSUy1TZXJ2aWNlcy1Ob3QtQWxsb3dlZC1Jbi1UaGlzLVBMTU4sCgljUy1QUy1jb29yZGluYXRpb24tcmVxdWlyZWQsCgkuLi4sCgluZXR3b3JrLWZhaWx1cmUsCglub3QtYXV0aG9yaXplZC1mb3ItdGhpcy1DU0cKfQoKClJlbG9jYXRpb25SZXF1aXJlbWVudCA6Oj0gRU5VTUVSQVRFRCB7Cglsb3NzbGVzcywKCW5vbmUsCgkuLi4sCglyZWFsdGltZQp9CgpSZWxvY2F0aW9uVHlwZSA6Oj0gRU5VTUVSQVRFRCB7Cgl1ZS1ub3QtaW52b2x2ZWQsCgl1ZS1pbnZvbHZlZCwKCS4uLgp9CgpSZXBldGl0aW9uTnVtYmVyMCA6Oj0gSU5URUdFUiAoMC4uMjU1KQoKUmVwZXRpdGlvbk51bWJlcjEgOjo9IElOVEVHRVIgKDEuLjI1NikKCgpSZXBvcnRBcmVhIDo6PSBFTlVNRVJBVEVEIHsKCXNlcnZpY2UtYXJlYSwKCWdlb2dyYXBoaWNhbC1hcmVhLAoJLi4uCn0KClJlcG9ydEludGVydmFsCQk6Oj0JRU5VTUVSQVRFRCB7CgkJCQkJCW1zMjUwLAoJCQkJCQltczUwMCwKCQkJCQkJbXMxMDAwLAoJCQkJCQltczIwMDAsCgkJCQkJCW1zMzAwMCwKCQkJCQkJbXM0MDAwLAoJCQkJCQltczYwMDAsCgkJCQkJCW1zMTIwMDAsCgkJCQkJCW1zMTYwMDAsCgkJCQkJCW1zMjAwMDAsCgkJCQkJCW1zMjQwMDAsCgkJCQkJCW1zMzIwMDAsCgkJCQkJCW1zNjQwMDAsCgkJCQkJCS4uLiwKCQkJCQkJbXM4MDAwLAoJCQkJCQltczI4MDAwCn0KClJlcG9ydEFtb3VudAkJOjo9CUVOVU1FUkFURUQgeyBuMSwgbjIsIG40LCBuOCwgbjE2LCBuMzIsIG42NCwgaW5maW5pdHksIC4uLiB9CgpSZXF1ZXN0ZWRHUFNBc3Npc3RhbmNlRGF0YSAJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSAuLiAzOCApKQoJLS0gZ3BzQXNzaXN0YW5jZURhdGEgYXMgZGVmaW5lZCBpbiAyNC4wODAgLS0KClJlcXVlc3RlZEdBTlNTQXNzaXN0YW5jZURhdGEgCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEgLi4gMjAxICkpCgktLSBnYW5zc0Fzc2lzdGFuY2VEYXRhIGFzIGRlZmluZWQgaW4gMjQuMDgwIC0tCgpSZXF1ZXN0ZWRMb2NhdGlvblJlbGF0ZWREYXRhVHlwZSA6Oj0gRU5VTUVSQVRFRCB7CglkZWNpcGhlcmluZ0tleXNVRUJhc2VkT1RET0EsCglkZWNpcGhlcmluZ0tleXNBc3Npc3RlZEdQUywKCWRlZGljYXRlZEFzc2lzdGFuY2VEYXRhVUVCYXNlZE9URE9BLAoJZGVkaWNhdGVkQXNzaXN0YW5jZURhdGFBc3Npc3RlZEdQUywKCS4uLiwKLS0gUmVsZWFzZSA3IGV4dGVuc2lvbiBlbGVtZW50cyAtLQoJZGVjaXBoZXJpbmdLZXlzQXNzaXN0ZWRHQU5TUywKCWRlZGljYXRlZEFzc2lzdGFuY2VEYXRhQXNzaXN0ZWRHQU5TUywKCWRlY2lwaGVyaW5nS2V5c0Fzc2lzdGVkR1BTYW5kR0FOU1MsCglkZWRpY2F0ZWRBc3Npc3RhbmNlRGF0YUFzc2lzdGVkR1BTYW5kR0FOU1MKfQoKUmVxdWVzdGVkTUJNU0lQTXVsdGljYXN0QWRkcmVzc2FuZEFQTlJlcXVlc3QgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhub29mTXVsdGljYXN0U2VydmljZXNQZXJSTkMpKSBPRgoJTUJNU0lQTXVsdGljYXN0QWRkcmVzc2FuZEFQTmxpc3QKCk1CTVNJUE11bHRpY2FzdEFkZHJlc3NhbmRBUE5saXN0IDo6PSBTRVFVRU5DRSB7Cgl0TUdJCQkJCQlUTUdJLAoJaVBNdWx0aWNhc3RBZGRyZXNzCQlJUE11bHRpY2FzdEFkZHJlc3MsCglhUE4JCQkJCQlBUE4sCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7TUJNU0lQTXVsdGljYXN0QWRkcmVzc2FuZEFQTmxpc3QtRXh0SUVzfSB9IAlPUFRJT05BTCwKCS4uLgp9CgpNQk1TSVBNdWx0aWNhc3RBZGRyZXNzYW5kQVBObGlzdC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKUmVxdWVzdGVkTXVsdGljYXN0U2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIChTSVpFICgxLi4gbWF4bm9vZk11bHRpY2FzdFNlcnZpY2VzUGVyVUUpKSBPRgoJVE1HSQoKUmVxdWVzdGVkLVJBQi1QYXJhbWV0ZXItVmFsdWVzIDo6PSBTRVFVRU5DRSB7CglyZXF1ZXN0ZWRNYXhCaXRyYXRlcwkJCQlSZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1NYXhCaXRyYXRlTGlzdAkJCU9QVElPTkFMLAoJcmVxdWVzdGVkR3VhcmFudGVlZEJpdHJhdGVzCQkJCVJlcXVlc3RlZC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdAkJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBSZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1WYWx1ZXMtRXh0SUVzfSB9IAlPUFRJT05BTCwKCS4uLgp9CgpSZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1WYWx1ZXMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNiB0byBlbmFibGUgUk5DIHRvIHJlcXVlc3QgdGhlIGV4ZWN1dGlvbiBvZiBhbiBhbHRlcm5hdGl2ZSBSQUIgY29uZmlndXJhdGlvbiAtLQoJeyBJRCBpZC1BbHRlcm5hdGl2ZVJBQkNvbmZpZ3VyYXRpb25SZXF1ZXN0CQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIEFsdGVybmF0aXZlUkFCQ29uZmlndXJhdGlvblJlcXVlc3QJUFJFU0VOQ0Ugb3B0aW9uYWwgfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDcgdG8gcmVxdWVzdCBhbiBFeHRlbmRlZCBNYXhpbXVtIEJpdHJhdGUgLS0KCXsgSUQgaWQtUmVxdWVzdGVkLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdAkJQ1JJVElDQUxJVFkgcmVqZWN0CUVYVEVOU0lPTiBSZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZE1heEJpdHJhdGVMaXN0CVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA3IHRvIHJlcXVlc3QgYW4gRXh0ZW5kZWQgR3VhcmFudGVlZCBCaXRyYXRlIC0tCgl7IElEIGlkLVJlcXVlc3RlZC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIFJlcXVlc3RlZC1SQUItUGFyYW1ldGVyLUV4dGVuZGVkR3VhcmFudGVlZEJpdHJhdGVMaXN0CVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIHJlcXVlc3QgYW4gU3VwcG9ydGVkIE1heGltdW0gQml0cmF0ZSAtLQoJeyBJRCBpZC1SZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRNYXhCaXRyYXRlTGlzdAkJQ1JJVElDQUxJVFkgcmVqZWN0CUVYVEVOU0lPTiBTdXBwb3J0ZWRSQUItUGFyYW1ldGVyQml0cmF0ZUxpc3QJCVBSRVNFTkNFIG9wdGlvbmFsIH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIHJlcXVlc3QgYW4gU3VwcG9ydGVkIEd1YXJhbnRlZWQgQml0cmF0ZSAtLQoJeyBJRCBpZC1SZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1TdXBwb3J0ZWRHdWFyYW50ZWVkQml0cmF0ZUxpc3QJCUNSSVRJQ0FMSVRZIHJlamVjdAlFWFRFTlNJT04gU3VwcG9ydGVkUkFCLVBhcmFtZXRlckJpdHJhdGVMaXN0CVBSRVNFTkNFIG9wdGlvbmFsIH0sCgkuLi4KfQoKUmVxdWVzdGVkLVJBQi1QYXJhbWV0ZXItRXh0ZW5kZWRNYXhCaXRyYXRlTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgRXh0ZW5kZWRNYXhCaXRyYXRlCgpSZXF1ZXN0ZWQtUkFCLVBhcmFtZXRlci1FeHRlbmRlZEd1YXJhbnRlZWRCaXRyYXRlTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgRXh0ZW5kZWRHdWFyYW50ZWVkQml0cmF0ZQoKUmVxdWVzdGVkLVJBQi1QYXJhbWV0ZXItTWF4Qml0cmF0ZUxpc3QgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mU2VwYXJhdGVUcmFmZmljRGlyZWN0aW9ucykpIE9GIE1heEJpdHJhdGUKClJlcXVlc3RlZC1SQUItUGFyYW1ldGVyLUd1YXJhbnRlZWRCaXRyYXRlTGlzdAk6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heE5yT2ZTZXBhcmF0ZVRyYWZmaWNEaXJlY3Rpb25zKSkgT0YgR3VhcmFudGVlZEJpdHJhdGUKCgpSZXF1ZXN0VHlwZSA6Oj0gU0VRVUVOQ0UgewoJZXZlbnQJCQkJRXZlbnQsCglyZXBvcnRBcmVhCQkJUmVwb3J0QXJlYSwKCWFjY3VyYWN5Q29kZQkJSU5URUdFUiAoMC4uMTI3KQlPUFRJT05BTCwKCS4uLgp9CgpSZXNpZHVhbEJpdEVycm9yUmF0aW8gOjo9IFNFUVVFTkNFIHsKCW1hbnRpc3NhCQkJSU5URUdFUiAoMS4uOSksCglleHBvbmVudAkJCUlOVEVHRVIgKDEuLjgpLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1Jlc2lkdWFsQml0RXJyb3JSYXRpby1FeHRJRXN9IH0gT1BUSU9OQUwKfQotLSBSZXNpZHVhbEJpdEVycm9yUmF0aW8gPSBtYW50aXNzYSAqIDEwXi1leHBvbmVudAoKUmVzaWR1YWxCaXRFcnJvclJhdGlvLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpSZXNwb25zZVRpbWUJOjo9IEVOVU1FUkFURUQgewoJbG93ZGVsYXksCglkZWxheXRvbGVyYW50LAouLi4KfQoKUklNSW5mb3JtYXRpb24JCQkJCTo6PSBPQ1RFVCBTVFJJTkcKClJJTS1UcmFuc2ZlciA6Oj0gU0VRVUVOQ0UgewoJcklNSW5mb3JtYXRpb24JCQkJUklNSW5mb3JtYXRpb24sCglySU1Sb3V0aW5nQWRkcmVzcwkJCVJJTVJvdXRpbmdBZGRyZXNzCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1JJTS1UcmFuc2Zlci1FeHRJRXN9IH0gT1BUSU9OQUwKfQoKUklNLVRyYW5zZmVyLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpSSU1Sb3V0aW5nQWRkcmVzcyA6Oj0gQ0hPSUNFIHsKCXRhcmdldFJOQy1JRAkJCQkJVGFyZ2V0Uk5DLUlELAoJZ0VSQU4tQ2VsbC1JRAkJCQkJR0VSQU4tQ2VsbC1JRCwKCS4uLiAsCgl0YXJnZXRlTkItSUQJCQkJCVRhcmdldEVOQi1JRAp9CgoKUk5DLUlECQkJCQk6Oj0gSU5URUdFUiAoMC4uNDA5NSkKLS0gUk5DLUlECQkJCQk6Oj0gQklUIFNUUklORyAoU0laRSAoMTIpKQotLSBIYXJtb25pemVkIHdpdGggUk5TQVAgYW5kIE5CQVAgZGVmaW5pdGlvbnMKCgpSTkNUcmFjZUluZm9ybWF0aW9uOjo9IFNFUVVFTkNFIHsKCXRyYWNlUmVmZXJlbmNlCQkJCQlUcmFjZVJlZmVyZW5jZSwKCXRyYWNlQWN0aXZhdGlvbkluZGljYXRvcgkJRU5VTUVSQVRFRCB7YWN0aXZhdGVkLGRlYWN0aXZhdGVkfSwKCWVxdWlwbWVudHNUb0JlVHJhY2VkCQkJRXF1aXBtZW50c1RvQmVUcmFjZWQJCQkJCQkJCQkJCQlPUFRJT05BTCwKCS0tIFRoaXMgSUUgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgVHJhY2UgQWN0aXZhdGlvbiBJbmRpY2F0b3IgSUUgaXMgc2V0IHRvICJBY3RpdmF0ZWQiLgoJaUUtRXh0ZW5zaW9ucwkJCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFJOQ1RyYWNlSW5mb3JtYXRpb24tRXh0SUVzfSB9CQlPUFRJT05BTAp9CgpSTkNUcmFjZUluZm9ybWF0aW9uLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDExIHRvIGVuYWJsZSBhbm9ueW1pemF0aW9uIE1EVCBmb3IgYXJlYSBiYXNlZCBNRFQgLS0KCXtJRCBpZC1UcmFjZVJlY29yZGluZ1Nlc3Npb25SZWZlcmVuY2UJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gVHJhY2VSZWNvcmRpbmdTZXNzaW9uUmVmZXJlbmNlCVBSRVNFTkNFIG9wdGlvbmFsfXwKCXtJRCBpZC1JTVNJCQkJCQkJCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBJTVNJCQkJCQkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJe0lEIGlkLVRyYWNlLUNvbGxlY3Rpb24tRW50aXR5LUlQLUFkZGVzcwlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIFRyYW5zcG9ydExheWVyQWRkcmVzcwkJCQlQUkVTRU5DRSBvcHRpb25hbH18Cgl7SUQgaWQtU2VydmluZy1DZWxsLUlkZW50aWZpZXIJCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBVVFJBTi1DZWxsSUQJCQkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9LAoJLi4uCn0KClJOU0FQUmVsb2NhdGlvblBhcmFtZXRlcnMJCQk6Oj0JU0VRVUVOQ0UgewoJcmFiUGFybWV0ZXJzTGlzdAkJCVJBQlBhcmFtZXRlcnNMaXN0IAkJCQkJCU9QVElPTkFMLAoJbG9jYXRpb25SZXBvcnRpbmcJCQlMb2NhdGlvblJlcG9ydGluZ1RyYW5zZmVySW5mb3JtYXRpb24JT1BUSU9OQUwsCgl0cmFjZUluZm9ybWF0aW9uCQkJVHJhY2VJbmZvcm1hdGlvbiAJCQkJCQlPUFRJT05BTCwKCXNvdXJjZVNBSQkJCQkJU0FJCQkJCQkJCQkJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFJOU0FQUmVsb2NhdGlvblBhcmFtZXRlcnMtRXh0SUVzIH0gfQkJT1BUSU9OQUwsCgkuLi4KfQoKUk5TQVBSZWxvY2F0aW9uUGFyYW1ldGVycy1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKUlJDLUNvbnRhaW5lcgkJCQk6Oj0gT0NURVQgU1RSSU5HCgpSVExvYWRWYWx1ZQk6Oj0gSU5URUdFUiAoMC4uMTAwKQoKUlNSVkNDLUhPLUluZGljYXRpb24gOjo9IEVOVU1FUkFURUQgewoJcHMtb25seSwKCS4uLgp9CgpSU1JWQ0MtSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCW5vbmNlCQkJCQlCSVQgU1RSSU5HIChTSVpFICgxMjgpKSwKCWlNU0luZm9ybWF0aW9uCQkJT0NURVQgU1RSSU5HKFNJWkUoMS4uIG1heFNpemVPZklNU0luZm8pKSwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgUlNSVkNDLUluZm9ybWF0aW9uLUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgoKfQoKUlNSVkNDLUluZm9ybWF0aW9uLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpSU1JWQ0MtT3BlcmF0aW9uLVBvc3NpYmxlIDo6PSBFTlVNRVJBVEVEIHsKCXJzcnZjYy1wb3NzaWJsZSwKCS4uLgp9CgotLSBTCgpTQUMJCQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQpTQUkgOjo9IFNFUVVFTkNFIHsKCXBMTU5pZGVudGl0eQkJCQlQTE1OaWRlbnRpdHksCglsQUMJCQkJTEFDLAoJc0FDCQkJCVNBQywKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtTQUktRXh0SUVzfSB9IE9QVElPTkFMCn0KClNBSS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU0FQSSA6Oj0gRU5VTUVSQVRFRCB7CglzYXBpLTAsCglzYXBpLTMsCgkuLi4KfQoKU2Vzc2lvblVwZGF0ZUlEIDo6PSBJTlRFR0VSICgwLi4gMTA0ODU3NSkKU2hhcmVkLU5ldHdvcmstSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCQlwTE1Ocy1pbi1zaGFyZWQtbmV0d29yawkJCVBMTU5zLWluLXNoYXJlZC1uZXR3b3JrLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtTaGFyZWQtTmV0d29yay1JbmZvcm1hdGlvbi1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCgl9CgpTZXNzaW9uLVJlLWVzdGFibGlzaG1lbnQtSW5kaWNhdG9yCTo6PSBFTlVNRVJBVEVEIHt0cnVlLCAuLi59CgpTaGFyZWQtTmV0d29yay1JbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU2lnbmFsbGluZ0luZGljYXRpb24gOjo9IEVOVU1FUkFURUQgewoJc2lnbmFsbGluZywKCS4uLgp9CgpTRFUtRXJyb3JSYXRpbyA6Oj0gU0VRVUVOQ0UgewoJbWFudGlzc2EJCQlJTlRFR0VSICgxLi45KSwKCWV4cG9uZW50CQkJSU5URUdFUiAoMS4uNiksCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7U0RVLUVycm9yUmF0aW8tRXh0SUVzfSB9IE9QVElPTkFMCn0KLS0gU0RVLUVycm9yUmF0aW8gPSBtYW50aXNzYSAqIDEwXi1leHBvbmVudAoKU0RVLUVycm9yUmF0aW8tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KU0RVLUZvcm1hdEluZm9ybWF0aW9uUGFyYW1ldGVycyA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heFJBQi1TdWJmbG93Q29tYmluYXRpb24pKSBPRgoJU0VRVUVOQ0UgewoJCXN1YmZsb3dTRFUtU2l6ZQkJCVN1YmZsb3dTRFUtU2l6ZSAJT1BUSU9OQUwsCgkJckFCLVN1YmZsb3dDb21iaW5hdGlvbkJpdFJhdGUJUkFCLVN1YmZsb3dDb21iaW5hdGlvbkJpdFJhdGUgCU9QVElPTkFMLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtTRFUtRm9ybWF0SW5mb3JtYXRpb25QYXJhbWV0ZXJzLUV4dElFc30gfSBPUFRJT05BTCwKCQkuLi4KCX0KClNEVS1Gb3JtYXRJbmZvcm1hdGlvblBhcmFtZXRlcnMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClNEVS1QYXJhbWV0ZXJzIDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4UkFCLVN1YmZsb3dzKSkgT0YKCVNFUVVFTkNFIHsKCQlzRFUtRXJyb3JSYXRpbwkJCVNEVS1FcnJvclJhdGlvIE9QVElPTkFMCgkJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IGlmIHRoZSBEZWxpdmVyeSBPZiBFcnJvbmVvdXMgU0RVIElFIGlzIHNldCB0byAiWWVzIiBvciAiTm8iIC0tLAoJCXJlc2lkdWFsQml0RXJyb3JSYXRpbwkJUmVzaWR1YWxCaXRFcnJvclJhdGlvLAoJCWRlbGl2ZXJ5T2ZFcnJvbmVvdXNTRFUJCURlbGl2ZXJ5T2ZFcnJvbmVvdXNTRFUsCgkJc0RVLUZvcm1hdEluZm9ybWF0aW9uUGFyYW1ldGVycwlTRFUtRm9ybWF0SW5mb3JtYXRpb25QYXJhbWV0ZXJzIE9QVElPTkFMLAoJCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtTRFUtUGFyYW1ldGVycy1FeHRJRXN9IH0gT1BUSU9OQUwsCgkJLi4uCgl9CgpTRFUtUGFyYW1ldGVycy1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU0dTTi1Hcm91cC1JZGVudGl0eSA6Oj0gQ0hPSUNFIHsKCW51bGwtTlJJCQkJCU51bGwtTlJJLAoJc0dTTi1Hcm91cC1JRAkJCVNHU04tR3JvdXAtSUQKfQoKU0dTTi1Hcm91cC1JRCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyKSkKClNOQS1BY2Nlc3MtSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCQlhdXRob3Jpc2VkUExNTnMJCQlBdXRob3Jpc2VkUExNTnMsCgkJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1NOQS1BY2Nlc3MtSW5mb3JtYXRpb24tRXh0SUVzfSB9IE9QVElPTkFMLAoJCS4uLgoJfQoKU05BLUFjY2Vzcy1JbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU05BQwkJCQk6Oj0gSU5URUdFUiAoMC4uNjU1MzUpCgpTZXJ2aWNlLUhhbmRvdmVyIDo6PSBFTlVNRVJBVEVEIHsKCWhhbmRvdmVyLXRvLUdTTS1zaG91bGQtYmUtcGVyZm9ybWVkLAoJaGFuZG92ZXItdG8tR1NNLXNob3VsZC1ub3QtYmUtcGVyZm9ybWVkLAoJaGFuZG92ZXItdG8tR1NNLXNoYWxsLW5vdC1iZS1wZXJmb3JtZWQsCgkuLi4KfQoKU291cmNlLVRvVGFyZ2V0LVRyYW5zcGFyZW50Q29udGFpbmVyIDo6PSBPQ1RFVCBTVFJJTkcKLS0gVGhpcyBJRSBpcyBhIHRyYW5zcGFyZW50IGNvbnRhaW5lciwgdGhlIElFIHNoYWxsIGJlIGVuY29kZWQgbm90IGFzIGFuIE9DVEVUIFNUUklORyBidXQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIHNwZWNpZmljYXRpb25zIG9mIHRoZSB0YXJnZXQgc3lzdGVtLgotLSBOb3RlOiBJbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMgc3BlY2lmaWNhdGlvbiwgdGhpcyBJRSBtYXkgZWl0aGVyIGNhcnJ5IHRoZSBTb3VyY2UgUk5DIHRvCi0tIFRhcmdldCBSTkMgVHJhbnNwYXJlbnQgQ29udGFpbmVyIG9yIHRoZSBTb3VyY2UgZU5CIHRvIFRhcmdldCBlTkIgVHJhbnNwYXJlbnQgQ29udGFpbmVyIElFIGFzCi0tIGRlZmluZWQgaW4gVFMgMzYuNDEzIFs0OV0KClNvdXJjZWVOb2RlQi1Ub1RhcmdldGVOb2RlQi1UcmFuc3BhcmVudENvbnRhaW5lciA6Oj0gT0NURVQgU1RSSU5HCgoKU291cmNlQ2VsbElEIDo6PSBDSE9JQ0UgewoJc291cmNlVVRSQU5DZWxsSUQJCQlTb3VyY2VVVFJBTkNlbGxJRCwKCXNvdXJjZUdFUkFOQ2VsbElECQkJQ0dJLAoJLi4uCn0KClNvdXJjZUJTUy1Ub1RhcmdldEJTUy1UcmFuc3BhcmVudENvbnRhaW5lcgkJOjo9IE9DVEVUIFNUUklORwoKU291cmNlSUQgOjo9IENIT0lDRSB7Cglzb3VyY2VSTkMtSUQJCQlTb3VyY2VSTkMtSUQsCglzQUkJCQkJU0FJLAoJLi4uCn0KCgpTb3VyY2VSTkMtSUQgOjo9IFNFUVVFTkNFIHsKCXBMTU5pZGVudGl0eQkJCQlQTE1OaWRlbnRpdHksCglyTkMtSUQJCQkJUk5DLUlELAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1NvdXJjZVJOQy1JRC1FeHRJRXN9IH0gT1BUSU9OQUwKfQoKU291cmNlUk5DLUlELUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDcgdG8gaW5kaWNhdGUgZXh0ZW5kZWQgUk5DLUlEIC0tCgl7IElEIGlkLUV4dGVuZGVkUk5DLUlECQkJCUNSSVRJQ0FMSVRZIHJlamVjdAlFWFRFTlNJT04gRXh0ZW5kZWRSTkMtSUQJCVBSRVNFTkNFIG9wdGlvbmFsCX0sCgkuLi4KfQoKU291cmNlUk5DLVRvVGFyZ2V0Uk5DLVRyYW5zcGFyZW50Q29udGFpbmVyIDo6PSBTRVFVRU5DRSB7CglyUkMtQ29udGFpbmVyCQkJUlJDLUNvbnRhaW5lciwKCW51bWJlck9mSXVJbnN0YW5jZXMJCU51bWJlck9mSXVJbnN0YW5jZXMsCglyZWxvY2F0aW9uVHlwZSAJCQlSZWxvY2F0aW9uVHlwZSwKCWNob3NlbkludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG0gQ2hvc2VuSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobQlPUFRJT05BTCwKCWludGVncml0eVByb3RlY3Rpb25LZXkJCUludGVncml0eVByb3RlY3Rpb25LZXkJCQlPUFRJT05BTCwKCWNob3NlbkVuY3J5cHRpb25BbGdvcml0aEZvclNpZ25hbGxpbmcgQ2hvc2VuRW5jcnlwdGlvbkFsZ29yaXRobQkJT1BUSU9OQUwsCgljaXBoZXJpbmdLZXkJCQlFbmNyeXB0aW9uS2V5CQkJCU9QVElPTkFMLAoJY2hvc2VuRW5jcnlwdGlvbkFsZ29yaXRoRm9yQ1MJQ2hvc2VuRW5jcnlwdGlvbkFsZ29yaXRobQkJT1BUSU9OQUwsCgljaG9zZW5FbmNyeXB0aW9uQWxnb3JpdGhGb3JQUwlDaG9zZW5FbmNyeXB0aW9uQWxnb3JpdGhtCQlPUFRJT05BTCwKCWQtUk5USQkJCQlELVJOVEkgCQkJCQlPUFRJT05BTAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IGlmIHRoZSBSZWxvY2F0aW9uIHR5cGUgSUUgaXMgc2V0IHRvICJVRSBub3QgaW52b2x2ZWQgaW4gcmVsb2NhdGlvbiBvZiBTUk5TIiAtLSwKCXRhcmdldENlbGxJZAkJCVRhcmdldENlbGxJZAkJCQlPUFRJT05BTAoJLS0gVGhpcyBJRSBzaGFsbCBiZSBwcmVzZW50IGlmIHRoZSBSZWxvY2F0aW9uIHR5cGUgSUUgaXMgc2V0IHRvICJVRSBpbnZvbHZlZCBpbiByZWxvY2F0aW9uIG9mIFNSTlMiIC0tLAoJckFCLVRyQ0gtTWFwcGluZwkJCVJBQi1UckNILU1hcHBpbmcJCQkJT1BUSU9OQUwsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7U291cmNlUk5DLVRvVGFyZ2V0Uk5DLVRyYW5zcGFyZW50Q29udGFpbmVyLUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpTb3VyY2VSTkMtVG9UYXJnZXRSTkMtVHJhbnNwYXJlbnRDb250YWluZXItRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgOTkgdG8gZW5hYmxlIHRyYW5zZmVyIG9mIFNSQiBtYXBwaW5nIG9udG8gSXVyIHRyYW5zcG9ydCBjaGFubmVsIElkcyAtLQoJe0lEIGlkLVNSQi1UckNILU1hcHBpbmcJCQkJCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIFNSQi1UckNILU1hcHBpbmcJCQkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgNSB0byBlbmFibGUgSW50ZXIgUkFOIExvYWQgSW5mb3JtYXRpb24gRXhjaGFuZ2Ugb3ZlciBJdSAtLQoJe0lEIGlkLUNlbGxMb2FkSW5mb3JtYXRpb25Hcm91cAkJCQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIENlbGxMb2FkSW5mb3JtYXRpb25Hcm91cAkJCQlQUkVTRU5DRSBvcHRpb25hbH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA2IHRvIHByb3ZpZGUgVHJhY2UgUmVjb3JkaW5nIFNlc3Npb24gSW5mb3JtYXRpb24gdG8gdGhlIFRhcmdldCBSTkMgLS0KCXtJRCBpZC1UcmFjZVJlY29yZGluZ1Nlc3Npb25JbmZvcm1hdGlvbgkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBUcmFjZVJlY29yZGluZ1Nlc3Npb25JbmZvcm1hdGlvbglQUkVTRU5DRSBvcHRpb25hbH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA2IHRvIGluZGljYXRlIHRvIHRoZSBUYXJnZXQgUk5DIHRoYXQgdGhlIFVFIGhhcyBhY3RpdmF0ZWQgTXVsdGljYXN0IFNlcnZpY2UgLS0KCXtJRCBpZC1NQk1TTGlua2luZ0luZm9ybWF0aW9uCQkJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gTUJNU0xpbmtpbmdJbmZvcm1hdGlvbgkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJe0lEIGlkLWQtUk5USS1mb3ItTm9JdUNTVVAJCQkJCUNSSVRJQ0FMSVRZIHJlamVjdAlFWFRFTlNJT04gRC1STlRJCQkJCQkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJe0lEIGlkLVVFLUhpc3RvcnktSW5mb3JtYXRpb24JCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBVRS1IaXN0b3J5LUluZm9ybWF0aW9uCQkJCQlQUkVTRU5DRSBvcHRpb25hbH18Cgl7SUQgaWQtU3Vic2NyaWJlclByb2ZpbGVJRGZvclJGUAkJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gU3Vic2NyaWJlclByb2ZpbGVJRGZvclJGUAkJCQlQUkVTRU5DRSBvcHRpb25hbH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA4IHRvIHRyYW5zZmVyIHRvIHRoZSBUYXJnZXQgUk5DIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIFNSVkNDIG9wZXJhdGlvbiAtLQoJe0lEIGlkLVNSVkNDLUluZm9ybWF0aW9uIAkJCQkJQ1JJVElDQUxJVFkgcmVqZWN0CUVYVEVOU0lPTiBTUlZDQy1JbmZvcm1hdGlvbgkJCQkJCQlQUkVTRU5DRSBvcHRpb25hbH18Cgl7SUQgaWQtUFNSQUJ0b2JlUmVwbGFjZWQgCQkJCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIFJBQi1JRAkJCQkJCQkJCVBSRVNFTkNFIG9wdGlvbmFsfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDkgdG8gdHJhbnNmZXIgdG8gdGhlIFRhcmdldCBSTkMgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgQ1NGQiBvcGVyYXRpb24gLS0KCXtJRCBpZC1DU0ZCLUluZm9ybWF0aW9uIAkJCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBDU0ZCLUluZm9ybWF0aW9uIAkJCQkJCQlQUkVTRU5DRSBvcHRpb25hbH18Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSAxMCB0byBpbmRpY2F0ZSB0byB0aGUgVGFyZ2V0IFJOQyB0aGUgbmVlZCBvZiBjb250aW51ZWQgSVJBVCBtZWFzdXJlbWVudCAtLQoJe0lEIGlkLUlSQVQtTWVhc3VyZW1lbnQtQ29uZmlndXJhdGlvbgkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBJUkFULU1lYXN1cmVtZW50LUNvbmZpZ3VyYXRpb24JCVBSRVNFTkNFIG9wdGlvbmFsfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDEwIHRvIGluZGljYXRlIE1hbmFnZW1lbnQgQmFzZWQgTURUIEFsbG93ZWQgLS0KCXtJRCBpZC1NYW5hZ2VtZW50LUJhc2VkLU1EVC1BbGxvd2VkCQkJQ1JJVElDQUxJVFkgaWdub3JlCUVYVEVOU0lPTiBNYW5hZ2VtZW50LUJhc2VkLU1EVC1BbGxvd2VkCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAotLSBFeHRlbnNpb24gZm9yIFJlbGVhc2UgMTEgdG8gaW5kaWNhdGUgTWFuYWdlbWVudCBCYXNlZCBNRFQgUExNTiBMaXN0IC0tCgl7SUQgaWQtTWFuYWdlbWVudC1CYXNlZC1NRFQtUExNTi1MaXN0CQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIE1EVC1QTE1OLUxpc3QJCQkJCQkJCVBSRVNFTkNFIG9wdGlvbmFsfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDExIHRvIGluZGljYXRlIHRoZSBsYXN0IEUtVVRSQU4gUExNTiBJZGVudGl0eSAtLQoJe0lEIGlkLUxhc3RFLVVUUkFOUExNTklkZW50aXR5CQkJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gUExNTmlkZW50aXR5CQkJCQkJCQlQUkVTRU5DRSBvcHRpb25hbH0sCgkuLi4KfQoKSVJBVC1NZWFzdXJlbWVudC1Db25maWd1cmF0aW9uIDo6PSBTRVFVRU5DRSB7CglyU1JQCQkJCQkJSU5URUdFUiAoMC4uOTcpCQkJT1BUSU9OQUwsCglyU1JRCQkJCQkJSU5URUdFUiAoMC4uMzQpCQkJT1BUSU9OQUwsCglpUkFUbWVhc3VyZW1lbnRQYXJhbWV0ZXJzCUlSQVRtZWFzdXJlbWVudFBhcmFtZXRlcnMsCglpRS1FeHRlbnNpb25zCQkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge0lSQVQtTWVhc3VyZW1lbnQtQ29uZmlndXJhdGlvbi1FeHRJRXN9IH0gT1BUSU9OQUx9CgpJUkFULU1lYXN1cmVtZW50LUNvbmZpZ3VyYXRpb24tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJe0lEIGlkLVJTUlEtVHlwZQkJCQkJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gUlNSUS1UeXBlCQkJCQkJUFJFU0VOQ0Ugb3B0aW9uYWx9fAoJe0lEIGlkLVJTUlEtRXh0ZW5zaW9uCQkJCQlDUklUSUNBTElUWSBpZ25vcmUJRVhURU5TSU9OIFJTUlEtRXh0ZW5zaW9uCQkJCVBSRVNFTkNFIG9wdGlvbmFsfSwKCS4uLgp9CgpJUkFUbWVhc3VyZW1lbnRQYXJhbWV0ZXJzOjo9IFNFUVVFTkNFIHsKCW1lYXN1cmVtZW50RHVyYXRpb24JCUlOVEVHRVIgKDEuLjEwMCksCgllVVRSQU5GcmVxdWVuY2llcwkJRVVUUkFORnJlcXVlbmNpZXMJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBJUkFUbWVhc3VyZW1lbnRQYXJhbWV0ZXJzLUV4dElFc30gfSBPUFRJT05BTH0KCklSQVRtZWFzdXJlbWVudFBhcmFtZXRlcnMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClJTUlEtVHlwZSA6Oj0gU0VRVUVOQ0UgewoJYWxsU3ltYm9scwkJCQkJCQlCT09MRUFOLAoJd2lkZUJhbmQJCQkJCQkJQk9PTEVBTgp9CgpSU1JRLUV4dGVuc2lvbiA6Oj0gSU5URUdFUiAoLTMwLi40NiwgLi4uKQoKRVVUUkFORnJlcXVlbmNpZXMgOjo9IFNFUVVFTkNFIChTSVpFICgxLi5tYXhOck9mRVVUUkFGcmVxcykpIE9GIFNFUVVFTkNFIHsKCWVhcmZjbgkJCQkJSU5URUdFUiAoMC4uNjU1MzUpLAoJbWVhc0JhbmQJCQkJTWVhc0JhbmQJCQlPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtFVVRSQU5GcmVxdWVuY2llcy1FeHRJRXN9IH0gT1BUSU9OQUx9CgpNZWFzQmFuZCA6Oj0gRU5VTUVSQVRFRCB7Cgl2NiwKCXYxNSwKCXYyNSwKCXY1MCwKCXY3NSwKCXYxMDAKfQoKRVVUUkFORnJlcXVlbmNpZXMtRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJeyBJRCBpZC1FQVJGQ04tRXh0ZW5kZWQJCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIEVBUkZDTi1FeHRlbmRlZAkJUFJFU0VOQ0Ugb3B0aW9uYWx9LAoJLi4uCn0KClN1YnNjcmliZXJQcm9maWxlSURmb3JSRlAgOjo9IElOVEVHRVIgKDEuLjI1NikKClNvdXJjZVN0YXRpc3RpY3NEZXNjcmlwdG9yIDo6PSBFTlVNRVJBVEVEIHsKCXNwZWVjaCwKCXVua25vd24sCgkuLi4KfQoKU3VwcG9ydGVkUkFCLVBhcmFtZXRlckJpdHJhdGVMaXN0IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4ubWF4TnJPZlNlcGFyYXRlVHJhZmZpY0RpcmVjdGlvbnMpKSBPRiBTdXBwb3J0ZWRCaXRyYXRlCgpTdXBwb3J0ZWRCaXRyYXRlIDo6PSBJTlRFR0VSICgxLi4xMDAwMDAwMDAwLCAuLi4pCi0tIFVuaXQgaXMgYml0cyBwZXIgc2VjCgpTb3VyY2VVVFJBTkNlbGxJRCA6Oj0gU0VRVUVOQ0UgewoJcExNTmlkZW50aXR5CQkJUExNTmlkZW50aXR5LAoJdVRSQU5jZWxsSUQJCQkJVGFyZ2V0Q2VsbElkLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1NvdXJjZVVUUkFOQ2VsbElELUV4dElFc30gfSBPUFRJT05BTAp9CgpTb3VyY2VVVFJBTkNlbGxJRC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU1JCLUlEIDo6PSBJTlRFR0VSICgxLi4zMikKClNSQi1UckNILU1hcHBpbmcgOjo9CVNFUVVFTkNFICggU0laRSAoMS4ubWF4TnJPZlNSQnMpKSBPRgoJU1JCLVRyQ0gtTWFwcGluZ0l0ZW0KClNSQi1UckNILU1hcHBpbmdJdGVtIDo6PSBTRVFVRU5DRSB7CglzUkItSUQJCQlTUkItSUQsCgl0ckNILUlECQkJVHJDSC1JRCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgU1JCLVRyQ0gtTWFwcGluZ0l0ZW0tRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCgpTUkItVHJDSC1NYXBwaW5nSXRlbS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKU1JWQ0MtSE8tSW5kaWNhdGlvbiA6Oj0gRU5VTUVSQVRFRCB7Cglwcy1hbmQtY3MsCgljcy1vbmx5LAoJLi4uCn0KClNSVkNDLUluZm9ybWF0aW9uIDo6PSBTRVFVRU5DRSB7Cglub25jZQkJCUJJVCBTVFJJTkcgKFNJWkUgKDEyOCkpLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBTUlZDQy1JbmZvcm1hdGlvbi1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKU1JWQ0MtSW5mb3JtYXRpb24tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClNSVkNDLU9wZXJhdGlvbi1Qb3NzaWJsZSA6Oj0gRU5VTUVSQVRFRCB7CglzcnZjYy1wb3NzaWJsZSwKCS4uLgp9CgpTdWJmbG93U0RVLVNpemUJCQkJOjo9IElOVEVHRVIgKDAuLjQwOTUpCi0tIFVuaXQgaXMgYml0CgoKLS0gVApUQUMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMikpCgpUQUkgOjo9IFNFUVVFTkNFIHsKCXBMTU5pZGVudGl0eQkJCVBMTU5pZGVudGl0eSwKCXRBQwkJCQkJCVRBQywKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtUQUktRXh0SUVzfSB9IE9QVElPTkFMCn0KClRBSS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKClRhcmdldC1Ub1NvdXJjZS1UcmFuc3BhcmVudENvbnRhaW5lciA6Oj0gT0NURVQgU1RSSU5HCi0tIFRoaXMgSUUgaXMgYSB0cmFuc3BhcmVudCBjb250YWluZXIsIHRoZSBJRSBzaGFsbCBiZSBlbmNvZGVkIG5vdCBhcyBhbiBPQ1RFVCBTVFJJTkcgYnV0IGFjY29yZGluZyB0byB0aGUgdHlwZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4KLS0gTm90ZTogSW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIHNwZWNpZmljYXRpb24sIHRoaXMgSUUgbWF5IGVpdGhlciBjYXJyeSB0aGUgVGFyZ2V0IFJOQyB0bwotLSBTb3VyY2UgUk5DIFRyYW5zcGFyZW50IENvbnRhaW5lciBvciB0aGUgVGFyZ2V0IGVOQiB0byBTb3VyY2UgZU5CIFRyYW5zcGFyZW50IENvbnRhaW5lciBJRSBhcwotLSBkZWZpbmVkIGluIFRTIDM2LjQxMyBbNDldCgpUYXJnZXRlTm9kZUItVG9Tb3VyY2VlTm9kZUItVHJhbnNwYXJlbnRDb250YWluZXIgOjo9IE9DVEVUIFNUUklORwoKVGFyZ2V0QlNTLVRvU291cmNlQlNTLVRyYW5zcGFyZW50Q29udGFpbmVyCQk6Oj0gT0NURVQgU1RSSU5HCgpUYXJnZXRDZWxsSWQJCQkJOjo9IElOVEVHRVIgKDAuLjI2ODQzNTQ1NSkKClRhcmdldElEIDo6PSBDSE9JQ0UgewoJdGFyZ2V0Uk5DLUlECQkJVGFyZ2V0Uk5DLUlELAoJY0dJCQkJCUNHSSwKCgkuLi4sCgl0YXJnZXRlTkItSUQJVGFyZ2V0RU5CLUlECn0KClRhcmdldEVOQi1JRCA6Oj0gU0VRVUVOQ0UgewoJcExNTmlkZW50aXR5CQkJUExNTmlkZW50aXR5LAoJZU5CLUlECQkJCQlFTkItSUQsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7VGFyZ2V0RU5CLUlELUV4dElFc30gfSBPUFRJT05BTCwKCXNlbGVjdGVkVEFJCQlUQUksCgkuLi4KfQoKVGFyZ2V0RU5CLUlELUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgoKVGFyZ2V0Uk5DLUlEIDo6PSBTRVFVRU5DRSB7CglsQUkJCQkJTEFJLAoJckFDCQkJCVJBQyAJCU9QVElPTkFMLAoJck5DLUlECQkJCVJOQy1JRCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtUYXJnZXRSTkMtSUQtRXh0SUVzfSB9IE9QVElPTkFMCn0KClRhcmdldFJOQy1JRC1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7Ci0tIEV4dGVuc2lvbiBmb3IgUmVsZWFzZSA3IHRvIGluZGljYXRlIGV4dGVuZGVkIFJOQy1JRCAtLQoJeyBJRCBpZC1FeHRlbmRlZFJOQy1JRAkJCQlDUklUSUNBTElUWSByZWplY3QJRVhURU5TSU9OIEV4dGVuZGVkUk5DLUlECQlQUkVTRU5DRSBvcHRpb25hbAl9LAoJLi4uCn0KClRhcmdldFJOQy1Ub1NvdXJjZVJOQy1UcmFuc3BhcmVudENvbnRhaW5lciA6Oj0gU0VRVUVOQ0UgewoJclJDLUNvbnRhaW5lcgkJCVJSQy1Db250YWluZXIsCglkLVJOVEkJCQkJCUQtUk5USSAJCQkJCU9QVElPTkFMCgktLSBNYXkgYmUgaW5jbHVkZWQgdG8gYWxsb3cgdGhlIHRyaWdnZXJpbmcgb2YgdGhlIFJlbG9jYXRpb24gRGV0ZWN0IHByb2NlZHVyZSBmcm9tIHRoZSBJdXIgSW50ZXJmYWNlIC0tLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1RhcmdldFJOQy1Ub1NvdXJjZVJOQy1UcmFuc3BhcmVudENvbnRhaW5lci1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKVGFyZ2V0Uk5DLVRvU291cmNlUk5DLVRyYW5zcGFyZW50Q29udGFpbmVyLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpUQkNELVNUUklORyAJCQkJOjo9IE9DVEVUIFNUUklORwoKVGVtcG9yYXJ5VUUtSUQgOjo9IENIT0lDRSB7Cgl0TVNJCQkJCVRNU0ksCglwLVRNU0kJCQkJUC1UTVNJLAoJLi4uCn0KClRpbWUtVUUtU3RheWVkSW5DZWxsIDo6PSBJTlRFR0VSICgwLi40MDk1KQoKVGltZS1VRS1TdGF5ZWRJbkNlbGwtRW5oYW5jZWRHcmFudWxhcml0eSA6Oj0gSU5URUdFUiAoMC4uNDA5NTApCgpUaW1lVG9NQk1TRGF0YVRyYW5zZmVyCQk6Oj0gT0NURVQgU1RSSU5HKFNJWkUoMSkpCgpUaW1pbmdEaWZmZXJlbmNlVUxETAk6Oj0gT0NURVQgU1RSSU5HIChTSVpFKDEpKQoKVE1HSSA6Oj0gU0VRVUVOQ0UgewoJcExNTmlkZW50aXR5CQkJUExNTmlkZW50aXR5LAoJc2VydmljZUlECQkJCU9DVEVUIFNUUklORyAoU0laRSAoMykpLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1RNR0ktRXh0SUVzfSB9IE9QVElPTkFMCn0KClRNR0ktRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClRNU0kJCQkJCTo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQoKVHJhY2VEZXB0aCA6Oj0gRU5VTUVSQVRFRCB7CgltaW5pbXVtLAoJbWVkaXVtLAoJbWF4aW11bSwKCS4uLgp9CgpUcmFjZUluZm9ybWF0aW9uCTo6PSBTRVFVRU5DRSB7Cgl0cmFjZVJlZmVyZW5jZQkJCQlUcmFjZVJlZmVyZW5jZSwKCXVlLWlkZW50aXR5CQkJCQlVRS1JRCwKCXRyYWNlUHJvcGFnYXRpb25QYXJhbWV0ZXJzCVRyYWNlUHJvcGFnYXRpb25QYXJhbWV0ZXJzIE9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFRyYWNlSW5mb3JtYXRpb24tRXh0SUVzIH0gfSBPUFRJT05BTCwKCS4uLgp9CgpUcmFjZUluZm9ybWF0aW9uLUV4dElFcwlSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLi4uCn0KClRyYWNlUHJvcGFnYXRpb25QYXJhbWV0ZXJzIDo6PSBTRVFVRU5DRSB7Cgl0cmFjZVJlY29yZGluZ1Nlc3Npb25SZWZlcmVuY2UJCVRyYWNlUmVjb3JkaW5nU2Vzc2lvblJlZmVyZW5jZSwKCXRyYWNlRGVwdGgJCQkJCQkJVHJhY2VEZXB0aCwKCWxpc3RPZkludGVyZmFjZXNUb1RyYWNlCQkJCUxpc3RPZkludGVyZmFjZXNUb1RyYWNlCQlPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgVHJhY2VQcm9wYWdhdGlvblBhcmFtZXRlcnMtRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KClRyYWNlUHJvcGFnYXRpb25QYXJhbWV0ZXJzLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpUcmFjZVJlY29yZGluZ1Nlc3Npb25JbmZvcm1hdGlvbgk6Oj0gU0VRVUVOQ0UgewoJdHJhY2VSZWZlcmVuY2UJCQkJCQlUcmFjZVJlZmVyZW5jZSwKCXRyYWNlUmVjb3JkaW5nU2Vzc2lvblJlZmVyZW5jZQkJVHJhY2VSZWNvcmRpbmdTZXNzaW9uUmVmZXJlbmNlLAoJaUUtRXh0ZW5zaW9ucwkJCQkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBUcmFjZVJlY29yZGluZ1Nlc3Npb25JbmZvcm1hdGlvbi1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKVHJhY2VSZWNvcmRpbmdTZXNzaW9uSW5mb3JtYXRpb24tRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KClRyYWNlUmVjb3JkaW5nU2Vzc2lvblJlZmVyZW5jZQkJOjo9IElOVEVHRVIgKDAuLjY1NTM1KQoKVHJhY2VSZWZlcmVuY2UJCQkJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMi4uMykpCgpUcmFjZVR5cGUJCQkJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0tIFJlZmVyZW5jZTogR1NNIFRTIDEyLjA4CgpUcmFmZmljQ2xhc3MgOjo9IEVOVU1FUkFURUQgewoJY29udmVyc2F0aW9uYWwsCglzdHJlYW1pbmcsCglpbnRlcmFjdGl2ZSwKCWJhY2tncm91bmQsCgkuLi4KfQoKVHJhZmZpY0hhbmRsaW5nUHJpb3JpdHkgCQk6Oj0gSU5URUdFUiB7IHNwYXJlICgwKSwgaGlnaGVzdCAoMSksIGxvd2VzdCAoMTQpLCBuby1wcmlvcml0eS11c2VkICgxNSkgfSAoMC4uMTUpCgpUcmFuc2ZlckRlbGF5IAkJCQk6Oj0gSU5URUdFUiAoMC4uNjU1MzUpCi0tIFVuaXQgaXMgbWlsbGlzZWNvbmQKClVuc3VjY2Vzc2Z1bGx5VHJhbnNtaXR0ZWREYXRhVm9sdW1lCTo6PSBJTlRFR0VSICgwLi40Mjk0OTY3Mjk1KQoKVHJhbnNwb3J0TGF5ZXJBZGRyZXNzIAkJCTo6PSBCSVQgU1RSSU5HIChTSVpFICgxLi4xNjAsIC4uLikpCgpUckNILUlEIDo6PSBTRVFVRU5DRSB7CglkQ0gtSUQJCQkJRENILUlECQlPUFRJT05BTCwKCWRTQ0gtSUQJCQkJRFNDSC1JRAkJT1BUSU9OQUwsCgl1U0NILUlECQkJCVVTQ0gtSUQJCU9QVElPTkFMLAoJaUUtRXh0ZW5zaW9ucwkJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBUckNILUlELUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpUckNILUlELUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDUgdG8gZW5hYmxlIHRyYW5zZmVyIG9mIEhTLURTQ0gtTUFDLWQtRmxvdy1JRCBvbnRvIEl1ciB0cmFuc3BvcnQgY2hhbm5lbCBJRCAtLQoJe0lEIGlkLWhTLURTQ0gtTUFDLWQtRmxvdy1JRAlDUklUSUNBTElUWSBpZ25vcmUJCUVYVEVOU0lPTiBIUy1EU0NILU1BQy1kLUZsb3ctSUQJCVBSRVNFTkNFIG9wdGlvbmFsfXwKLS0gRXh0ZW5zaW9uIGZvciBSZWxlYXNlIDYgdG8gZW5hYmxlIHRyYW5zZmVyIG9mIEUtRENILU1BQy1kLUZsb3ctSUQgb250byBJdXIgdHJhbnNwb3J0IGNoYW5uZWwgSUQgLS0KCXtJRCBpZC1FLURDSC1NQUMtZC1GbG93LUlECUNSSVRJQ0FMSVRZIGlnbm9yZQkJRVhURU5TSU9OIEUtRENILU1BQy1kLUZsb3ctSUQgUFJFU0VOQ0Ugb3B0aW9uYWx9LAoJLi4uCn0KClRyQ0gtSUQtTGlzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLm1heFJBQi1TdWJmbG93cykpIE9GCglUckNILUlECgpUcmlnZ2VySUQJCQkJOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMy4uMjIpKQoKVHVubmVsSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCXRyYW5zcG9ydExheWVyQWRkcmVzcwlUcmFuc3BvcnRMYXllckFkZHJlc3MsCgl1RFAtUG9ydC1OdW1iZXIJCQlQb3J0LU51bWJlcgkJCQlPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHtUdW5uZWwtSW5mb3JtYXRpb24tRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KClR1bm5lbC1JbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKClR5cGVPZkVycm9yIDo6PSBFTlVNRVJBVEVEIHsKCW5vdC11bmRlcnN0b29kLAoJbWlzc2luZywKCS4uLgp9CgoKLS0gVQoKVUUtQWdncmVnYXRlTWF4aW11bUJpdFJhdGUgOjo9IFNFUVVFTkNFIHsKCXVFLUFnZ3JlZ2F0ZU1heGltdW1CaXRSYXRlRG93bmxpbmsJCVVFLUFnZ3JlZ2F0ZU1heGltdW1CaXRSYXRlRG93bmxpbmsJT1BUSU9OQUwsCgl1RS1BZ2dyZWdhdGVNYXhpbXVtQml0UmF0ZVVwbGluawkJVUUtQWdncmVnYXRlTWF4aW11bUJpdFJhdGVVcGxpbmsJT1BUSU9OQUwsCgkuLi4KfQoKVUUtQWdncmVnYXRlTWF4aW11bUJpdFJhdGVEb3dubGluawkJCTo6PSBJTlRFR0VSICgxLi4xMDAwMDAwMDAwKQotLSBVbml0IGlzIGJpdHMgcGVyIHNlYwoKVUUtQWdncmVnYXRlTWF4aW11bUJpdFJhdGVVcGxpbmsJCQk6Oj0gSU5URUdFUiAoMS4uMTAwMDAwMDAwMCkKLS0gVW5pdCBpcyBiaXRzIHBlciBzZWMKCgpVRS1IaXN0b3J5LUluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcKClVFLUlEIDo6PSBDSE9JQ0UgewoJaW1zaQkJCQlJTVNJLAoJaW1laQkJCQlJTUVJLAoJLi4uLAoJaW1laXN2CQkJCUlNRUlTVgoKfQoKVUUtSXNOb3RTZXJ2ZWQ6Oj0gU0VRVUVOQ0UgewoJcGVybWFuZW50TkFTLVVFLUlECQlQZXJtYW5lbnROQVMtVUUtSUQsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFVFLUlzTm90U2VydmVkLUV4dElFcyB9IH0JCU9QVElPTkFMLAoJLi4uCn0KClVFLUlzTm90U2VydmVkLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgoKVUUtSXNTZXJ2ZWQ6Oj0gU0VRVUVOQ0UgewoJcGVybWFuZW50TkFTLVVFLUlECQlQZXJtYW5lbnROQVMtVUUtSUQsCglwTE1OaWRlbnRpdHkJCQlQTE1OaWRlbnRpdHksCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFVFLUlzU2VydmVkLUV4dElFcyB9IH0JCU9QVElPTkFMLAoJLi4uCn0KClVFLUlzU2VydmVkLUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgpVRS1Vc2FnZS1UeXBlIDo6PSBJTlRFR0VSICgwLi4yNTUpCgpVRVJlZ2lzdHJhdGlvblF1ZXJ5UmVzdWx0IDo6PSBDSE9JQ0UgewoJdUUtSXNTZXJ2ZWQJCQlVRS1Jc1NlcnZlZCwKCXVFLUlzTm90U2VydmVkCQlVRS1Jc05vdFNlcnZlZAp9CgpVRVNCSS1JdSA6Oj0gU0VRVUVOQ0UgewoJdUVTQkktSXVBCQlVRVNCSS1JdUEJT1BUSU9OQUwsCgl1RVNCSS1JdUIJCVVFU0JJLUl1QglPUFRJT05BTCwKCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsge1VFU0JJLUl1LUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpVRVNCSS1JdS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKVUVTQkktSXVBCQkJCTo6PSBCSVQgU1RSSU5HIChTSVpFKDEuLjEyOCkpCi0tIFJlZmVyZW5jZTogVFIyNS45OTQgLS0KVUVTQkktSXVCCQkJCTo6PSBCSVQgU1RSSU5HIChTSVpFKDEuLjEyOCkpCi0tIFJlZmVyZW5jZTogVFIyNS45OTUgLS0KClVMLUdUUC1QRFUtU2VxdWVuY2VOdW1iZXIJCTo6PSBJTlRFR0VSICgwLi42NTUzNSkKClVMLU4tUERVLVNlcXVlbmNlTnVtYmVyIAkJOjo9IElOVEVHRVIgKDAuLjY1NTM1KQoKVVBJbmZvcm1hdGlvbgkJOjo9CQlTRVFVRU5DRSB7CglmcmFtZVNlcU5vVUwJCQlGcmFtZVNlcXVlbmNlTnVtYmVyLAoJZnJhbWVTZXFOb0RMCQkJRnJhbWVTZXF1ZW5jZU51bWJlciwKCXBkdTE0RnJhbWVTZXFOb1VMCQlQRFVUeXBlMTRGcmFtZVNlcXVlbmNlTnVtYmVyLAoJcGR1MTRGcmFtZVNlcU5vREwJCVBEVVR5cGUxNEZyYW1lU2VxdWVuY2VOdW1iZXIsCglkYXRhUERVVHlwZQkJCQlEYXRhUERVVHlwZSwKCXVwaW5pdGlhbGlzYXRpb25GcmFtZQlVUEluaXRpYWxpc2F0aW9uRnJhbWUsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFVQSW5mb3JtYXRpb24tRXh0SUVzIH0gfQkJT1BUSU9OQUwsCgkuLi4KfQoKVVBJbmZvcm1hdGlvbi1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7Cgl7SUQgaWQtVGltaW5nRGlmZmVyZW5jZVVMREwJCUNSSVRJQ0FMSVRZIGlnbm9yZQlFWFRFTlNJT04gVGltaW5nRGlmZmVyZW5jZVVMREwJCVBSRVNFTkNFIG9wdGlvbmFsfSwKCgkuLi4KfQoKVVBJbml0aWFsaXNhdGlvbkZyYW1lCTo6PQlPQ1RFVCBTVFJJTkcKClVQLU1vZGVWZXJzaW9ucwkJCQk6Oj0gQklUIFNUUklORyAoU0laRSAoMTYpKQoKVVNDSC1JRAkJCQkJCTo6PSBJTlRFR0VSICgwLi4yNTUpCgpVc2VyUGxhbmVNb2RlIDo6PSBFTlVNRVJBVEVEIHsKCXRyYW5zcGFyZW50LW1vZGUsCglzdXBwb3J0LW1vZGUtZm9yLXByZWRlZmluZWQtU0RVLXNpemVzLAoJLi4uCn0KClVUUkFOLUNlbGxJRCA6Oj0gU0VRVUVOQ0UgewoJcExNTmlkZW50aXR5CQkJUExNTmlkZW50aXR5LAoJY2VsbElECQkJCQlUYXJnZXRDZWxsSWQsCglpRS1FeHRlbnNpb25zCQkJUHJvdG9jb2xFeHRlbnNpb25Db250YWluZXIgeyB7IFVUUkFOLUNlbGxJRC1FeHRJRXN9IH0gT1BUSU9OQUwKfQoKVVRSQU4tQ2VsbElELUV4dElFcyBSQU5BUC1QUk9UT0NPTC1FWFRFTlNJT04gOjo9IHsKCS4uLgp9CgoKLS0gVgoKVmVsb2NpdHlFc3RpbWF0ZSA6Oj0gQ0hPSUNFIHsKCWhvcml6b250YWxWZWxvY2l0eQkJCQkJCQkJSG9yaXpvbnRhbFZlbG9jaXR5LAoJaG9yaXpvbnRhbFdpdGhWZXJ0aWNhbFZlbG9jaXR5CQkJCQlIb3Jpem9udGFsV2l0aFZlcnRpY2FsVmVsb2NpdHksCglob3Jpem9udGFsVmVsb2NpdHlXaXRoVW5jZXJ0YWludHkJCQkJSG9yaXpvbnRhbFZlbG9jaXR5V2l0aFVuY2VydGFpbnR5LAoJaG9yaXpvbnRhbFdpdGhWZXJpdGNhbFZlbG9jaXR5QW5kVW5jZXJ0YWludHkJSG9yaXpvbnRhbFdpdGhWZXJ0aWNhbFZlbG9jaXR5QW5kVW5jZXJ0YWludHksCgkuLi4KfQoKSG9yaXpvbnRhbFZlbG9jaXR5CTo6PSBTRVFVRU5DRSB7Cglob3Jpem9udGFsU3BlZWRBbmRCZWFyaW5nCQkJCQkJSG9yaXpvbnRhbFNwZWVkQW5kQmVhcmluZywKCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBIb3Jpem9udGFsVmVsb2NpdHktRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkhvcml6b250YWxWZWxvY2l0eS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKSG9yaXpvbnRhbFdpdGhWZXJ0aWNhbFZlbG9jaXR5IDo6PSBTRVFVRU5DRSB7Cglob3Jpem9udGFsU3BlZWRBbmRCZWFyaW5nCQkJCQkJCUhvcml6b250YWxTcGVlZEFuZEJlYXJpbmcsCgl2ZXJpdGNhbFZlbG9jaXR5CQkJCQkJCQkJVmVydGljYWxWZWxvY2l0eSwKCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBIb3Jpem9udGFsV2l0aFZlcnRpY2FsVmVsb2NpdHktRXh0SUVzfSB9IE9QVElPTkFMLAoJLi4uCn0KCkhvcml6b250YWxXaXRoVmVydGljYWxWZWxvY2l0eS1FeHRJRXMgUkFOQVAtUFJPVE9DT0wtRVhURU5TSU9OIDo6PSB7CgkuLi4KfQoKCkhvcml6b250YWxWZWxvY2l0eVdpdGhVbmNlcnRhaW50eSA6Oj0gU0VRVUVOQ0UgewoJaG9yaXpvbnRhbFNwZWVkQW5kQmVhcmluZwkJCQkJCQlIb3Jpem9udGFsU3BlZWRBbmRCZWFyaW5nLAoJdW5jZXJ0YWludHlTcGVlZAkJCQkJCQkJCUlOVEVHRVIgKDAuLjI1NSksCglpRS1FeHRlbnNpb25zCQlQcm90b2NvbEV4dGVuc2lvbkNvbnRhaW5lciB7IHsgSG9yaXpvbnRhbFZlbG9jaXR5V2l0aFVuY2VydGFpbnR5LUV4dElFc30gfSBPUFRJT05BTCwKCS4uLgp9CgpIb3Jpem9udGFsVmVsb2NpdHlXaXRoVW5jZXJ0YWludHktRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkhvcml6b250YWxXaXRoVmVydGljYWxWZWxvY2l0eUFuZFVuY2VydGFpbnR5IDo6PSBTRVFVRU5DRSB7Cglob3Jpem9udGFsU3BlZWRBbmRCZWFyaW5nCQkJCQkJCUhvcml6b250YWxTcGVlZEFuZEJlYXJpbmcsCgl2ZXJpdGNhbFZlbG9jaXR5CQkJCQkJCQkJVmVydGljYWxWZWxvY2l0eSwKCWhvcml6b250YWxVbmNlcnRhaW50eVNwZWVkCQkJCQkJCUlOVEVHRVIgKDAuLjI1NSksCgl2ZXJ0aWNhbFVuY2VydGFpbnR5U3BlZWQJCQkJCQkJSU5URUdFUiAoMC4uMjU1KSwKCWlFLUV4dGVuc2lvbnMJCVByb3RvY29sRXh0ZW5zaW9uQ29udGFpbmVyIHsgeyBIb3Jpem9udGFsV2l0aFZlcnRpY2FsVmVsb2NpdHlBbmRVbmNlcnRhaW50eS1FeHRJRXN9IH0gT1BUSU9OQUwsCgkuLi4KfQoKSG9yaXpvbnRhbFdpdGhWZXJ0aWNhbFZlbG9jaXR5QW5kVW5jZXJ0YWludHktRXh0SUVzIFJBTkFQLVBST1RPQ09MLUVYVEVOU0lPTiA6Oj0gewoJLi4uCn0KCkhvcml6b250YWxTcGVlZEFuZEJlYXJpbmcgOjo9IFNFUVVFTkNFIHsKCWJlYXJpbmcJCQkJCQkJCQkJCUlOVEVHRVIgKDAuLjM1OSksCglob3Jpem9udGFsU3BlZWQJCQkJCQkJCQlJTlRFR0VSICgwLi4yMDQ3KQp9CgpWZXJ0aWNhbFZlbG9jaXR5IDo6PSBTRVFVRU5DRSB7Cgl2ZXJpdGNhbFNwZWVkCQkJCQkJCQkJSU5URUdFUiAoMC4uMjU1KSwKCXZlcml0Y2FsU3BlZWREaXJlY3Rpb24JCQkJCQkJVmVydGljYWxTcGVlZERpcmVjdGlvbgp9CgpWZXJ0aWNhbFNwZWVkRGlyZWN0aW9uIDo6PSBFTlVNRVJBVEVEIHsKCXVwd2FyZCwKCWRvd253YXJkCn0KClZlcnRpY2FsQWNjdXJhY3lDb2RlCQkJOjo9IElOVEVHRVIgKDAuLjEyNykKClZvaWNlU3VwcG9ydE1hdGNoSW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKCXN1cHBvcnRlZCwKCW5vdC1zdXBwb3J0ZWQsCgkuLi4KfQoKRU5ECg==