ClRoZSBBbWlnYSBCdWRkaGEgYW5kIENhdHdlYXNlbCBJREUgRHJpdmVyIChwYXJ0IG9mIGlkZS5jKSB3YXMgd3JpdHRlbiBieQpHZWVydCBVeXR0ZXJob2V2ZW4gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBzcGVjaWZpY2F0aW9uczoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVnaXN0ZXIgbWFwIG9mIHRoZSBCdWRkaGEgSURFIGNvbnRyb2xsZXIgYW5kIHRoZQpCdWRkaGEtcGFydCBvZiB0aGUgQ2F0d2Vhc2VsIFpvcnJvLUlJIHZlcnNpb24KClRoZSBBdXRvY29uZmlndXJhdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBqdXN0IGFzIENvbW1vZG9yZQpkZXNjcmliZWQgIGluICB0aGVpciAgbWFudWFscywgbm8gdHJpY2tzIGhhdmUgYmVlbiB1c2VkIChmb3IKZXhhbXBsZSBsZWF2aW5nIHNvbWUgYWRkcmVzcyBsaW5lcyBvdXQgb2YgdGhlIGVxdWF0aW9ucy4uLikuCklmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB0aGUgYm9hcmQgeW91cnNlbGYgKGZvciBleGFtcGxlIGxldAphICBMaW51eCAga2VybmVsICBjb25maWd1cmUgdGhlIGNhcmQpLCBsb29rIGF0IHRoZSBDb21tb2RvcmUKRG9jcy4gIFJlYWRpbmcgdGhlIG5pYmJsZXMgc2hvdWxkIGdpdmUgdGhpcyBpbmZvcm1hdGlvbjoKClZlbmRvciBudW1iZXI6IDQ2MjYgKCQxMjEyKQpwcm9kdWN0IG51bWJlcjogMCAoNDIgZm9yIENhdHdlYXNlbCBaLUlJKQpTZXJpYWwgbnVtYmVyOiAwClJvbS12ZWN0b3I6ICQxMDAwCgpUaGUgIGNhcmQgIHNob3VsZCBiZSBhIFotSUkgYm9hcmQsIHNpemUgNjRLLCBub3QgZm9yIGZyZWVtZW0KbGlzdCwgUm9tLVZla3RvciBpcyB2YWxpZCwgbm8gc2Vjb25kIEF1dG9jb25maWctYm9hcmQgb24gdGhlCnNhbWUgY2FyZCwgbm8gc3BhY2UgcHJlZmVyZW5jZSwgc3VwcG9ydHMgIlNodXR1cF9mb3JldmVyIi4KClNldHRpbmcgIHRoZSAgYmFzZSBhZGRyZXNzIHNob3VsZCBiZSBkb25lIGluIHR3byBzdGVwcywganVzdAphcyAgdGhlIEFtaWdhIEtpY2tzdGFydCBkb2VzOiAgVGhlIGxvd2VyIG5pYmJsZSBvZiB0aGUgOC1CaXQKYWRkcmVzcyBpcyB3cml0dGVuIHRvICQ0YSwgdGhlbiB0aGUgd2hvbGUgQnl0ZSBpcyB3cml0dGVuIHRvCiQ0OCwgd2hpbGUgaXQgZG9lc24ndCBtYXR0ZXIgaG93IG9mdGVuIHlvdSdyZSB3cml0aW5nIHRvICQ0YQphcyAgbG9uZyBhcyAkNDggaXMgbm90IHRvdWNoZWQuICBBZnRlciAkNDggaGFzIGJlZW4gd3JpdHRlbiwKdGhlICB3aG9sZSBjYXJkIGRpc2FwcGVhcnMgZnJvbSAkZTggYW5kIGlzIG1hcHBlZCB0byB0aGUgbmV3CmFkZHJlc3MganVzdCB3cml0dGVuLiAgTWFrZSBzaHVyZSAkNGEgaXMgd3JpdHRlbiBiZWZvcmUgJDQ4LApvdGhlcndpc2UgeW91ciBjaGFuY2UgaXMgb25seSAxOjE2IHRvIGZpbmQgdGhlIGJvYXJkIDotKS4KClRoZSBsb2NhbCBtZW1vcnktbWFwIGlzIGV2ZW4gYWN0aXZlIHdoZW4gbWFwcGVkIHRvICRlODoKCiQwLSQ3ZQkJQXV0b2tvbmZpZy1zcGFjZSwgc2VlIFotSUkgZG9jcy4KCiQ4MC0kN2ZkCXJlc2VydmVkCgokN2ZlCQlTcGVlZC1zZWxlY3QgUmVnaXN0ZXI6IFJlYWQgJiBXcml0ZQoJCShkZXNjcmlwdGlvbiBzZWUgZnVydGhlciBkb3duKQoKJDgwMC0kOGZmCUlERS1TZWxlY3QgMCAoUG9ydCAwLCBSZWdpc3RlciBzZXQgMCkKCiQ5MDAtJDlmZglJREUtU2VsZWN0IDEgKFBvcnQgMCwgUmVnaXN0ZXIgc2V0IDEpCgokYTAwLSRhZmYJSURFLVNlbGVjdCAyIChQb3J0IDEsIFJlZ2lzdGVyIHNldCAwKQoKJGIwMC0kYmZmCUlERS1TZWxlY3QgMyAoUG9ydCAxLCBSZWdpc3RlciBzZXQgMSkKCiRjMDAtJGNmZglJREUtU2VsZWN0IDQgKFBvcnQgMiwgUmVnaXN0ZXIgc2V0IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F0d2Vhc2VsIG9ubHkhKQoKJGQwMC0kZGZmCUlERS1TZWxlY3QgNSAoUG9ydCAzLCBSZWdpc3RlciBzZXQgMSwKCQkJICAgICAgQ2F0d2Vhc2VsIG9ubHkhKQoKJGUwMC0kZWZmCWxvY2FsIGV4cGFuc2lvbiBwb3J0LCBvbiBDYXR3ZWFzZWwgWi1JSSB0aGUgCgkJQ2F0d2Vhc2VsIHJlZ2lzdGVycyBhcmUgYWxzbyBtYXBwZWQgaGVyZS4KCQlOZXZlciB0b3VjaCwgdXNlIG11bHRpZGlzay5kZXZpY2UhCgkJCiRmMDAJCXJlYWQgb25seSwgQnl0ZS1hY2Nlc3M6IEJpdCA3IHNob3dzIHRoZSAKCQlsZXZlbCBvZiB0aGUgSVJRLWxpbmUgb2YgSURFIHBvcnQgMC4gCgokZjAxLSRmM2YJbWlycm9yIG9mICRmMDAKCiRmNDAJCXJlYWQgb25seSwgQnl0ZS1hY2Nlc3M6IEJpdCA3IHNob3dzIHRoZSAKCQlsZXZlbCBvZiB0aGUgSVJRLWxpbmUgb2YgSURFIHBvcnQgMS4gCgokZjQxLSRmN2YJbWlycm9yIG9mICRmNDAKCiRmODAJCXJlYWQgb25seSwgQnl0ZS1hY2Nlc3M6IEJpdCA3IHNob3dzIHRoZSAKCQlsZXZlbCBvZiB0aGUgSVJRLWxpbmUgb2YgSURFIHBvcnQgMi4gCgkJKENhdHdlYXNlbCBvbmx5ISkKCiRmODEtJGZiZgltaXJyb3Igb2YgJGY4MAoKJGZjMAkJd3JpdGUtb25seTogV3JpdGluZyBhbnkgdmFsdWUgdG8gdGhpcwoJCXJlZ2lzdGVyIGVuYWJsZXMgSVJRcyB0byBiZSBwYXNzZWQgZnJvbSB0aGUgCgkJSURFIHBvcnRzIHRvIHRoZSBab3JybyBidXMuIFRoaXMgbWVjaGFuaXNtIAoJCWhhcyBiZWVuIGltcGxlbWVudGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCAKCQloYXJkZGlza3MgdGhhdCBhcmUgZWl0aGVyIGRlZmVjdGl2ZSBvciBoYXZlCgkJYSBidWdneSBmaXJtd2FyZSBhbmQgcHVsbCB0aGUgSVJRIGxpbmUgdXAgCgkJd2hpbGUgc3RhcnRpbmcgdXAuIElmIGludGVycnVwdHMgd291bGQgCgkJYWx3YXlzIGJlIHBhc3NlZCB0byB0aGUgYnVzLCB0aGUgY29tcHV0ZXIgCgkJbWlnaHQgbm90IHN0YXJ0IHVwLiBPbmNlIGVuYWJsZWQsIHRoaXMgZmxhZyAKCQljYW4gbm90IGJlIGRpc2FibGVkIGFnYWluLiBUaGUgbGV2ZWwgb2YgdGhlIAoJCWZsYWcgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIGJ5IHNvZnR3YXJlIAoJCSh3aGF0IGZvcj8gV3JpdGUgdG8gbWUgaWYgaXQncyBuZWNlc3NhcnkhKS4KCiRmYzEtJGZmZgltaXJyb3Igb2YgJGZjMAoKJDEwMDAtJGZmZmYJQnVkZGhhLVJvbSB3aXRoIG9mZnNldCAkMTAwMCBpbiB0aGUgcm9tCgkJY2hpcC4gVGhlIGFkZHJlc3NlcyAkMCB0byAkZmZmIG9mIHRoZSByb20gCgkJY2hpcCBjYW5ub3QgYmUgcmVhZC4gUm9tIGlzIEJ5dGUtd2lkZSBhbmQKCQltYXBwZWQgdG8gZXZlbiBhZGRyZXNzZXMuCgpUaGUgIElERSBwb3J0cyBpc3N1ZSBhbiBJTlQyLiAgWW91IGNhbiByZWFkIHRoZSBsZXZlbCBvZiB0aGUKSVJRLWxpbmVzICBvZiAgdGhlICBJREUtcG9ydHMgYnkgcmVhZGluZyBmcm9tIHRoZSB0aHJlZSAodHdvCmZvciAgQnVkZGhhLW9ubHkpICByZWdpc3RlcnMgICRmMDAsICRmNDAgYW5kICRmODAuICBUaGlzIHdheQptb3JlICB0aGFuIG9uZSBJL08gcmVxdWVzdCBjYW4gYmUgaGFuZGxlZCBhbmQgeW91IGNhbiBlYXNpbHkKZGV0ZXJtaW5lICB3aGF0ICBkcml2ZXIgIGhhcyAgdG8gc2VydmUgdGhlIElOVDIuICBCdWRkaGEgYW5kCkNhdHdlYXNlbCAgZXhwYW5zaW9uICBib2FyZHMgIGNhbiBpc3N1ZSBhbiBJTlQ2LiAgQSBzZXBhcmF0ZQptZW1vcnkgIG1hcCAgaXMgYXZhaWxhYmxlIGZvciB0aGUgSS9PIG1vZHVsZSBhbmQgdGhlIHN5c29wJ3MKSS9PIG1vZHVsZS4KClRoZSBJREUgcG9ydHMgYXJlIGZlZCBieSB0aGUgYWRkcmVzcyBsaW5lcyBBMiB0byBBNCwganVzdCBhcwp0aGUgIEFtaWdhICAxMjAwICBhbmQgIEFtaWdhICA0MDAwICBJREUgcG9ydHMgYXJlLiAgVGhpcyB3YXkKZXhpc3RpbmcgIGRyaXZlcnMgIGNhbiBiZSBlYXNpbHkgcG9ydGVkIHRvIEJ1ZGRoYS4gIEEgbW92ZS5sCnBvbGxzICB0d28gIHdvcmRzICBvdXQgb2YgdGhlIHNhbWUgYWRkcmVzcyBvZiBJREUgcG9ydCBzaW5jZQpldmVyeSAgd29yZCAgaXMgIG1pcnJvcmVkICBvbmNlLiAgbW92ZW0gaXMgbm90IHBvc3NpYmxlLCBidXQKaXQncyAgbm90ICBuZWNlc3NhcnkgIGVpdGhlciwgIGJlY2F1c2UgIHlvdSBjYW4gb25seSBzcGVlZHVwCjY4MDAwICBzeXN0ZW1zICB3aXRoICB0aGlzICB0ZWNobmlxdWUuICAgQSA2ODAyMCBzeXN0ZW0gd2l0aApmYXN0bWVtIGlzIGZhc3RlciB3aXRoIG1vdmUubC4KCklmIHlvdSdyZSB1c2luZyB0aGUgbWlycm9yZWQgcmVnaXN0ZXJzIG9mIHRoZSBJREUtcG9ydHMgd2l0aApBNj0xLCAgdGhlIEJ1ZGRoYSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIHNwZWVkIHRoYXQgeW91IGhhdmUKc2VsZWN0ZWQgIGluICB0aGUgIHNwZWVkICByZWdpc3RlciAoc2VlIGZ1cnRoZXIgZG93bikuICBXaXRoCkE2PTEgIChmb3IgZXhhbXBsZSAkODQwIGZvciBwb3J0IDAsIHJlZ2lzdGVyIHNldCAwKSwgYSA3ODBucwphY2Nlc3MgIGlzIGJlaW5nIG1hZGUuICBUaGVzZSByZWdpc3RlcnMgc2hvdWxkIGJlIHVzZWQgZm9yIGEKY29tbWFuZCAgIGFjY2VzcyAgIHRvICB0aGUgIGhhcmRkaXNrL0NELVJvbSwgIHNpbmNlICBjb21tYW5kCmFjY2Vzc2VzICBhcmUgQnl0ZS13aWRlIGFuZCBoYXZlIHRvIGJlIG1hZGUgc2xvd2VyIGFjY29yZGluZwp0byB0aGUgQVRBLVgzVDkgbWFudWFsLgoKTm93ICBmb3IgdGhlIHNwZWVkLXJlZ2lzdGVyOiAgVGhlIHJlZ2lzdGVyIGlzIGJ5dGUtd2lkZSwgYW5kCm9ubHkgIHRoZSAgdXBwZXIgIHRocmVlICBiaXRzIGFyZSB1c2VkIChCaXRzIDcgdG8gNSkuICBCaXQgNAptdXN0ICBhbHdheXMgIGJlIHNldCB0byAxIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBsYXRlciBCdWRkaGEKdmVyc2lvbnMgIChpZiAgSSdsbCAgZXZlciAgdXBkYXRlIHRoaXMgb25lKS4gIEkgcHJlc3VtZSB0aGF0CkknbGwgIG5ldmVyIHVzZSB0aGUgbG93ZXIgZm91ciBiaXRzLCBidXQgdGhleSBoYXZlIHRvIGJlIHNldAp0byAxIGJ5IGRlZmluaXRpb24uCiAgVGhlICB2YWx1ZXMgaW4gdGhpcyB0YWJsZSBoYXZlIHRvIGJlIHNoaWZ0ZWQgNSBiaXRzIHRvIHRoZQpsZWZ0IGFuZCBvcidkIHdpdGggJDFmICh0aGlzIHNldHMgdGhlIGxvd2VyIDUgYml0cykuCgpBbGwgIHRoZSB0aW1pbmdzIGhhdmUgaW4gY29tbW9uOiAgU2VsZWN0IGFuZCBJT1IvSU9XIHJpc2UgYXQKdGhlICBzYW1lICB0aW1lLiAgIElPUiAgYW5kICBJT1cgaGF2ZSBhIHByb3BhZ2F0aW9uIGRlbGF5IG9mCmFib3V0ICAzMG5zICB0byAgdGhlIGNsb2NrcyBvbiB0aGUgWm9ycm8gYnVzLCB0aGF0J3Mgd2h5IHRoZQp2YWx1ZXMgIGFyZSBubyBtdWx0aXBsZSBvZiA3MS4gIE9uZSBjbG9jay1jeWNsZSBpcyA3MW5zIGxvbmcKKGV4YWN0bHkgNzAsNSBhdCAxNCwxOCBNaHogb24gUEFMIHN5c3RlbXMpLgoKdmFsdWUgMCAoRGVmYXVsdCBhZnRlciByZXNldCkKCjQ5N25zIFNlbGVjdCAoNyBjbG9jayBjeWNsZXMpICwgSU9SL0lPVyBhZnRlciAxNzJucyAoMiBjbG9jayBjeWNsZXMpCihzYW1lIHRpbWluZyBhcyB0aGUgQW1pZ2EgMTIwMCBkb2VzIG9uIGl0J3MgSURFIHBvcnQgd2l0aG91dAphY2NlbGVyYXRvciBjYXJkKQoKdmFsdWUgMQoKNjM5bnMgU2VsZWN0ICg5IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMjQzbnMgKDMgY2xvY2sgY3ljbGVzKQoKdmFsdWUgMgoKNzgxbnMgU2VsZWN0ICgxMSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDMxNG5zICg0IGNsb2NrIGN5Y2xlcykKCnZhbHVlIDMKCjM1NW5zIFNlbGVjdCAoNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDEwMW5zICgxIGNsb2NrIGN5Y2xlKQoKdmFsdWUgNAoKMzU1bnMgU2VsZWN0ICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMTcybnMgKDIgY2xvY2sgY3ljbGVzKQoKdmFsdWUgNQoKMzU1bnMgU2VsZWN0ICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMjQzbnMgKDMgY2xvY2sgY3ljbGVzKQoKdmFsdWUgNgoKMTA2NW5zIFNlbGVjdCAoMTUgY2xvY2sgY3ljbGVzKSwgSU9SL0lPVyBhZnRlciAzMTRucyAoNCBjbG9jayBjeWNsZXMpCgp2YWx1ZSA3CgozNTVucyBTZWxlY3QsICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMTAxbnMgKDEgY2xvY2sgY3ljbGUpCgpXaGVuIGFjY2Vzc2luZyBJREUgcmVnaXN0ZXJzIHdpdGggQTY9MSAoZm9yIGV4YW1wbGUgJDg0eCksCnRoZSB0aW1pbmcgd2lsbCBhbHdheXMgYmUgbW9kZSAwIDgtYml0IGNvbXBhdGlibGUsIG5vIG1hdHRlcgp3aGF0IHlvdSBoYXZlIHNlbGVjdGVkIGluIHRoZSBzcGVlZCByZWdpc3RlcjoKCjc4MW5zIHNlbGVjdCwgSU9SL0lPVyBhZnRlciA0IGNsb2NrIGN5Y2xlcyAoPTMxNG5zKSBha3RpdmUuIAoKQWxsICB0aGUgIHRpbWluZ3Mgd2l0aCBhIHZlcnkgc2hvcnQgc2VsZWN0LXNpZ25hbCAodGhlIDM1NW5zCmZhc3QgIGFjY2Vzc2VzKSAgZGVwZW5kICBvbiB0aGUgYWNjZWxlcmF0b3IgY2FyZCB1c2VkIGluIHRoZQpzeXN0ZW06ICBTb21ldGltZXMgdHdvIG1vcmUgY2xvY2sgY3ljbGVzIGFyZSBpbnNlcnRlZCBieSB0aGUKYnVzICBpbnRlcmZhY2UsICBtYWtpbmcgIHRoZSAgd2hvbGUgYWNjZXNzIDQ5N25zIGxvbmcuICBUaGlzCmRvZXNuJ3QgIGFmZmVjdCAgdGhlICByZWxpYWJpbGl0eSAgb2YgdGhlIGNvbnRyb2xsZXIgbm9yIHRoZQpwZXJmb3JtYW5jZSAgb2YgIHRoZSAgY2FyZCwgIHNpbmNlICB0aGlzIGRvZXNuJ3QgaGFwcGVuIHZlcnkKb2Z0ZW4uCgpBbGwgIHRoZSAgdGltaW5ncyAgYXJlICBjYWxjdWxhdGVkICBhbmQgIG9ubHkgIGNvbmZpcm1lZCAgYnkKbWVhc3VyZW1lbnRzICB0aGF0IGFsbG93ZWQgbWUgdG8gY291bnQgdGhlIGNsb2NrIGN5Y2xlcy4gIElmCnRoZSAgc3lzdGVtICBpcyBjbG9ja2VkIGJ5IGFuIG9zY2lsbGF0b3Igb3RoZXIgdGhhbiAyOCwzNzUxNgpNaHogIChmb3IgIGV4YW1wbGUgIHRoZSAgTlRTQy1mcmVxdWVuY3kgIDI4LDYzNjM2IE1oeiksIGVhY2gKY2xvY2sgIGN5Y2xlIGlzIHNob3J0ZW5lZCB0byBhIGJpdCBsZXNzIHRoYW4gNzBucyAobm90IHdvcnRoCm1lbnRpb25pbmcpLiAgIFlvdSAgY291bGQgdGhpbmsgb2YgYSBzbWFsbCBwZXJmb3JtYW5jZSBib29zdApieSAgb3ZlcmNsb2NraW5nICB0aGUgIHN5c3RlbSwgIGJ1dCAgeW91IHdvdWxkIGVpdGhlciBuZWVkIGEKbXVsdGlzeW5jICBtb25pdG9yLCAgb3IgIGEgIGdyYXBoaWNzIGNhcmQsIGFuZCB5b3VyIGludGVybmFsCmRpc2tkcml2ZSB3b3VsZCBnbyBjcmF6eSwgdGhhdCdzIHdoeSB5b3Ugc2hvdWxkbid0IHR1bmUgeW91cgpBbWlnYSB0aGlzIHdheS4KCkdpdmluZyAgeW91ICB0aGUgIHBvc3NpYmlsaXR5ICB0byAgd3JpdGUgIHNvZnR3YXJlICB0aGF0ICBpcwpjb21wYXRpYmxlICB3aXRoIGJvdGggdGhlIEJ1ZGRoYSBhbmQgdGhlIENhdHdlYXNlbCBaLUlJLCBUaGUKQnVkZGhhICBhY3RzICBqdXN0ICBsaWtlICBhICBDYXR3ZWFzZWwgIFotSUkgIHdpdGggbm8gZGV2aWNlCmNvbm5lY3RlZCAgdG8gIHRoZSAgdGhpcmQgIElERS1wb3J0LiAgIFRoZSBJUlEtcmVnaXN0ZXIgJGY4MAphbHdheXMgIHNob3dzIGEgIm5vIElSUSBoZXJlIiBvbiB0aGUgQnVkZGhhLCBhbmQgYWNjZXNzZXMgdG8KdGhlICB0aGlyZCAgSURFICBwb3J0ICBhcmUgIGdvaW5nIGludG8gZGF0YSdzIE5pcndhbmEgb24gdGhlCkJ1ZGRoYS4KCgkJCSAgICBKZW5zIFNjaPZuZmVsZCBmZWJydWFyeSAxOXRoLCAxOTk3CgkJCQkJdXBkYXRlZCBtYXkgMjd0aCwgMTk5NwoJCQkgICAgIGVNYWlsOiBzeXNvcEBub3N0bGdpYy50bmcub2NoZS5kZQoK