IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBjb3VudHJpZXMgLSBkZWZpbmVzIG1hcHBpbmcgYmV0d2VlbiBjYW5vbmljYWwgYW5kIG5hdGl2ZSBjb3VudHJ5CiMgICAgICAgICAgICAgbmFtZXMgYXMgcGVyIElTTy0zMTY2LgojCiMgJElkJAojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSAgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yICBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgIHRoZSBOT1RJQ0UgIGZpbGUgZGlzdHJpYnV0ZWQKIyB3aXRoICB0aGlzICB3b3JrICBmb3IgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gIHJlZ2FyZGluZyAgY29weXJpZ2h0CiMgb3duZXJzaGlwLiAgIFRoZSBBU0YgIGxpY2Vuc2VzIHRoaXMgIGZpbGUgdG8gIHlvdSB1bmRlciAgdGhlIEFwYWNoZQojIExpY2Vuc2UsIFZlcnNpb24gIDIuMCAodGhlICAiTGljZW5zZSIpOyB5b3UgbWF5ICBub3QgdXNlICB0aGlzIGZpbGUKIyBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICBZb3UgbWF5IG9idGFpbiAgYSBjb3B5IG9mCiMgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAgIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSAgS0lORCwgZWl0aGVyICBleHByZXNzIG9yCiMgaW1wbGllZC4gICBTZWUgIHRoZSBMaWNlbnNlICBmb3IgIHRoZSAgc3BlY2lmaWMgbGFuZ3VhZ2UgIGdvdmVybmluZwojIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwojIENvcHlyaWdodCAyMDAxLTIwMDggUm9ndWUgV2F2ZSBTb2Z0d2FyZSwgSW5jLgojIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKQUQgICAgQW5kb3JyYQpBRSAgICBVbml0ZWQgQXJhYiBFbWlyYXRlcwpBRiAgICBBZmdoYW5pc3RhbgpBRyAgICBBbnRpZ3VhIGFuZCBCYXJidWRhCkFJICAgIEFuZ3VpbGxhCkFMICAgIEFsYmFuaWEKQU0gICAgQXJtZW5pYQpBTiAgICBOZXRoZXJsYW5kcyBBbnRpbGxlcwpBTyAgICBBbmdvbGEKQVEgICAgQW50YXJjdGljYQpBUiAgICBBcmdlbnRpbmEKQVMgICAgQW1lcmljYW4gU2Ftb2EKQVQgICAgQXVzdHJpYQpBVSAgICBBdXN0cmFsaWEKQVcgICAgQXJ1YmEKQVggICAgxWxhbmQgSXNsYW5kcwpBWiAgICBBemVyYmFpamFuCkJBICAgIEJvc25pYSBhbmQgSGVyemVnb3ZpbmEKQkIgICAgQmFyYmFkb3MKQkQgICAgQmFuZ2xhZGVzaApCRSAgICBCZWxnaXVtCkJGICAgIEJ1cmtpbmEgRmFzbwpCRyAgICBCdWxnYXJpYQpCSCAgICBCYWhyYWluCkJJICAgIEJ1cnVuZGkKQkogICAgQmVuaW4KQkwgICAgU2FpbnQgQmFydGjpbGVteQpCTSAgICBCZXJtdWRhCkJOICAgIEJydW5laSBEYXJ1c3NhbGFtCkJPICAgIEJvbGl2aWEKQlIgICAgQnJhemlsCkJTICAgIEJhaGFtYXMKQlQgICAgQmh1dGFuCkJWICAgIEJvdXZldCBJc2xhbmQKQlcgICAgQm90c3dhbmEKQlkgICAgQmVsYXJ1cwpCWiAgICBCZWxpemUKQ0EgICAgQ2FuYWRhCkNDICAgIENvY29zIElzbGFuZHMsIEtlZWxpbmcgSXNsYW5kcwpDRCAgICBUaGUgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ28KQ0YgICAgQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljCkNHICAgIENvbmdvCkNIICAgIFN3aXR6ZXJsYW5kCkNJICAgIEP0dGUgRCdJdm9pcmUKQ0sgICAgQ29vayBJc2xhbmRzCkNMICAgIENoaWxlCkNNICAgIENhbWVyb29uCkNOICAgIENoaW5hCkNPICAgIENvbG9tYmlhCkNSICAgIENvc3RhIFJpY2EKQ1UgICAgQ3ViYQpDViAgICBDYXBlIFZlcmRlCkNYICAgIENocmlzdG1hcyBJc2xhbmQKQ1kgICAgQ3lwcnVzCkNaICAgIEN6ZWNoIFJlcHVibGljCkRFICAgIEdlcm1hbnkKREogICAgRGppYm91dGkKREsgICAgRGVubWFyawpETSAgICBEb21pbmljYQpETyAgICBEb21pbmljYW4gUmVwdWJsaWMKRFogICAgQWxnZXJpYQpFQyAgICBFY3VhZG9yCkVFICAgIEVzdG9uaWEKRUcgICAgRWd5cHQKRUggICAgV2VzdGVybiBTYWhhcmEKRVIgICAgRXJpdHJlYQpFUyAgICBTcGFpbgpFVCAgICBFdGhpb3BpYQpGSSAgICBGaW5sYW5kCkZKICAgIEZpamkKRksgICAgRmFsa2xhbmQgSXNsYW5kcwpGTSAgICBGZWRlcmF0ZWQgU3RhdGVzIG9mIE1pY3JvbmVzaWEKRk8gICAgRmFyb2UgSXNsYW5kcwpGUiAgICBGcmFuY2UKR0EgICAgR2Fib24KR0IgICAgVW5pdGVkIEtpbmdkb20KR0QgICAgR3JlbmFkYQpHRSAgICBHZW9yZ2lhCkdGICAgIEZyZW5jaCBHdWlhbmEKR0cgICAgR3Vlcm5zZXkKR0ggICAgR2hhbmEKR0kgICAgR2licmFsdGFyCkdMICAgIEdyZWVubGFuZApHTSAgICBHYW1iaWEKR04gICAgR3VpbmVhCkdQICAgIEd1YWRlbG91cGUKR1EgICAgRXF1YXRvcmlhbCBHdWluZWEKR1IgICAgR3JlZWNlCkdTICAgIFNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzCkdUICAgIEd1YXRlbWFsYQpHVSAgICBHdWFtCkdXICAgIEd1aW5lYS1CaXNzYXUKR1kgICAgR3V5YW5hCkhLICAgIEhvbmcgS29uZwpITSAgICBIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMKSE4gICAgSG9uZHVyYXMKSFIgICAgQ3JvYXRpYQpIVCAgICBIYWl0aQpIVSAgICBIdW5nYXJ5CklEICAgIEluZG9uZXNpYQpJRSAgICBJcmVsYW5kCklMICAgIElzcmFlbApJTSAgICBJc2xlIG9mIE1hbgpJTiAgICBJbmRpYQpJTyAgICBCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkKSVEgICAgSXJhcQpJUiAgICBJc2xhbWljIFJlcHVibGljIG9mIElyYW4KSVMgICAgSWNlbGFuZApJVCAgICBJdGFseQpKRSAgICBKZXJzZXkKSk0gICAgSmFtYWljYQpKTyAgICBKb3JkYW4KSlAgICAgSmFwYW4KS0UgICAgS2VueWEKS0cgICAgS3lyZ3l6c3RhbgpLSCAgICBDYW1ib2RpYQpLSSAgICBLaXJpYmF0aQpLTSAgICBDb21vcm9zCktOICAgIFNhaW50IEtpdHRzIGFuZCBOZXZpcwpLUCAgICBEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhCktSICAgIFJlcHVibGljIG9mIEtvcmVhCktXICAgIEt1d2FpdApLWSAgICBDYXltYW4gSXNsYW5kcwpLWiAgICBLYXpha2hzdGFuCkxBICAgIExhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljCkxCICAgIExlYmFub24KTEMgICAgU2FpbnQgTHVjaWEKTEkgICAgTGllY2h0ZW5zdGVpbgpMSyAgICBTcmkgTGFua2EKTFIgICAgTGliZXJpYQpMUyAgICBMZXNvdGhvCkxUICAgIExpdGh1YW5pYQpMVSAgICBMdXhlbWJvdXJnCkxWICAgIExhdHZpYQpMWSAgICBMaWJ5YW4gQXJhYiBKYW1haGlyaXlhCk1BICAgIE1vcm9jY28KTUMgICAgTW9uYWNvLCBQcmluY2lwYWxpdHkgb2YgTW9uYWNvCk1EICAgIFJlcHVibGljIG9mIE1vbGRvdmEKTUUgICAgTW9udGVuZWdybwpNRiAgICBTYWludCBNYXJ0aW4KTUcgICAgTWFkYWdhc2NhcgpNSCAgICBNYXJzaGFsbCBJc2xhbmRzCk1LICAgIEZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEsIFRoZSBGb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YgTWFjZWRvbmlhCk1MICAgIE1hbGkKTU0gICAgTXlhbm1hcgpNTiAgICBNb25nb2xpYQpNTyAgICBNYWNhbwpNUCAgICBOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMKTVEgICAgTWFydGluaXF1ZQpNUiAgICBNYXVyaXRhbmlhCk1TICAgIE1vbnRzZXJyYXQKTVQgICAgTWFsdGEKTVUgICAgTWF1cml0aXVzCk1WICAgIE1hbGRpdmVzCk1XICAgIE1hbGF3aQpNWCAgICBNZXhpY28KTVkgICAgTWFsYXlzaWEKTVogICAgTW96YW1iaXF1ZQpOQSAgICBOYW1pYmlhCk5DICAgIE5ldyBDYWxlZG9uaWEKTkUgICAgTmlnZXIKTkYgICAgTm9yZm9sayBJc2xhbmQKTkcgICAgTmlnZXJpYQpOSSAgICBOaWNhcmFndWEKTkwgICAgTmV0aGVybGFuZHMKTk8gICAgTm9yd2F5Ck5QICAgIE5lcGFsCk5SICAgIE5hdXJ1Ck5VICAgIE5pdWUKTlogICAgTmV3IFplYWxhbmQKT00gICAgT21hbgpQQSAgICBQYW5hbWEKUEUgICAgUGVydQpQRiAgICBGcmVuY2ggUG9seW5lc2lhClBHICAgIFBhcHVhIE5ldyBHdWluZWEKUEggICAgUGhpbGlwcGluZXMKUEggICAgUmVwdWJsaWMgb2YgdGhlIFBoaWxpcHBpbmVzClBLICAgIFBha2lzdGFuClBMICAgIFBvbGFuZApQTSAgICBTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uClBOICAgIFBpdGNhaXJuClBSICAgIFB1ZXJ0byBSaWNvClBTICAgIFBhbGVzdGluaWFuIFRlcnJpdG9yeQpQVCAgICBQb3J0dWdhbApQVyAgICBQYWxhdQpQWSAgICBQYXJhZ3VheQpRQSAgICBRYXRhcgpSRSAgICBS6XVuaW9uClJPICAgIFJvbWFuaWEKUlMgICAgU2VyYmlhClJTICAgIFNlcmJpYSBhbmQgTW9udGVuZWdybwpSVSAgICBSdXNzaWEKUlUgICAgUnVzc2lhbiBGZWRlcmF0aW9uClJXICAgIFJ3YW5kYQpTQSAgICBTYXVkaSBBcmFiaWEKU0IgICAgU29sb21vbiBJc2xhbmRzClNDICAgIFNleWNoZWxsZXMKU0QgICAgU3VkYW4KU0UgICAgU3dlZGVuClNHICAgIFNpbmdhcG9yZQpTSCAgICBTYWludCBIZWxlbmEKU0kgICAgU2xvdmVuaWEKU0ogICAgU3ZhbGJhcmQgYW5kIEphbiBNYXllbgpTSyAgICBTbG92YWtpYQpTTCAgICBTaWVycmEgTGVvbmUKU00gICAgU2FuIE1hcmlubwpTTiAgICBTZW5lZ2FsClNPICAgIFNvbWFsaWEKU1IgICAgU3VyaW5hbWUKU1QgICAgU2FvIFRvbWUgYW5kIFByaW5jaXBlClNWICAgIEVsIFNhbHZhZG9yClNZICAgIFN5cmlhbiBBcmFiIFJlcHVibGljClNaICAgIFN3YXppbGFuZApUQyAgICBUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMKVEQgICAgQ2hhZApURiAgICBGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMKVEcgICAgVG9nbwpUSCAgICBUaGFpbGFuZApUSiAgICBUYWppa2lzdGFuClRLICAgIFRva2VsYXUKVEwgICAgVGltb3ItTGVzdGUKVE0gICAgVHVya21lbmlzdGFuClROICAgIFR1bmlzaWEKVE8gICAgVG9uZ2EKVFIgICAgVHVya2V5ClRUICAgIFRyaW5pZGFkIGFuZCBUb2JhZ28KVFYgICAgVHV2YWx1ClRXICAgIFRhaXdhbgpUWiAgICBUYW56YW5pYQpVQSAgICBVa3JhaW5lClVHICAgIFVnYW5kYQpVTSAgICBVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMKVVMgICAgVW5pdGVkIFN0YXRlcwpVWSAgICBVcnVndWF5ClVaICAgIFV6YmVraXN0YW4KVkEgICAgSG9seSBTZWUKVkMgICAgU2FpbnQgVmluY2VudCBhbmQgVGhlIEdyZW5hZGluZXMsIFNhaW50IFZpbmNlbnQKVkUgICAgVmVuZXp1ZWxhClZHICAgIEJyaXRpc2ggVmlyZ2luIElzbGFuZHMKVkkgICAgVS5TLiBWaXJnaW4gSXNsYW5kcwpWTiAgICBWaWV0IE5hbSwgVmlldG5hbQpWVSAgICBWYW51YXR1CldGICAgIFdhbGxpcyBhbmQgRnV0dW5hCldTICAgIFNhbW9hCllFICAgIFllbWVuCllUICAgIE1heW90dGUKWkEgICAgU291dGggQWZyaWNhClpNICAgIFphbWJpYQpaVyAgICBaaW1iYWJ3ZQo=