MjAwMy0wNC0yMiAgUmVsZWFzZSBNYW5hZ2VyCgoJKiBHQ0MgMy4yLjMgUmVsZWFzZWQuCgoyMDAzLTAyLTA1ICBSZWxlYXNlIE1hbmFnZXIKCgkqIEdDQyAzLjIuMiBSZWxlYXNlZC4KCjIwMDItMTEtMTkgIFJlbGVhc2UgTWFuYWdlcgoKCSogR0NDIDMuMi4xIFJlbGVhc2VkLgoKMjAwMi0xMS0xOSAgUmVsZWFzZSBNYW5hZ2VyCgoJKiBHQ0MgMy4yLjEgUmVsZWFzZWQuCgoyMDAyLTExLTE4ICBSZWxlYXNlIE1hbmFnZXIKCgkqIEdDQyAzLjIuMSBSZWxlYXNlZC4KCjIwMDItMTAtMDcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmFtIChhbGwtbXVsdGkpOiBGaXggbXVsdGlsaWIgcGFyYWxsZWwgYnVpbGQuCgoyMDAyLTA4LTE0ICBSZWxlYXNlIE1hbmFnZXIKCgkqIEdDQyAzLjIgUmVsZWFzZWQuCgoyMDAyLTA3LTI1ICBSZWxlYXNlIE1hbmFnZXIKCgkqIEdDQyAzLjEuMSBSZWxlYXNlZC4KCjIwMDItMDUtMTQgIFJlbGVhc2UgTWFuYWdlcgoKCSogR0NDIDMuMSBSZWxlYXNlZC4KCjIwMDItMDUtMTQgIFJlbGVhc2UgTWFuYWdlcgoKCSogR0NDIDMuMSBSZWxlYXNlZC4KCjIwMDItMDUtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluIChPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUHJlc2VydmUgTEQgYXQKCXNjcmlwdCBlbnRyeSwgYW5kIHNldCBMRCB0byBpdCB3aGVuIGNvbmZpZ3VyaW5nIG11bHRpbGlicy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKMjAwMS0wNi0wOSAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+LCBTdGVwaGVuIEwgTW9zaGllciAgPG1vc2hpZXJAbWVkaWFvbmUubmV0PgoKCSogY29uZmlndXJlLmluIChBQ19FWEVFWFQpOiBXb3JrIGFyb3VuZCBpbiBjYXNlIGl0IGV4cGFuZHMgdG8KCW5vdGhpbmcsIGFzIGluIGF1dG9jb25mIDIuNTAuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgoJCUNoYW5nZUxvZyBmaWxlIGZvciB6bGliCgpDaGFuZ2VzIGluIDEuMS40ICgxMSBNYXJjaCAyMDAyKQotIFpGUkVFIHdhcyByZXBlYXRlZCBvbiBzYW1lIGFsbG9jYXRpb24gb24gc29tZSBlcnJvciBjb25kaXRpb25zLgogIFRoaXMgY3JlYXRlcyBhIHNlY3VyaXR5IHByb2JsZW0gZGVzY3JpYmVkIGluCiAgaHR0cDovL3d3dy56bGliLm9yZy9hZHZpc29yeS0yMDAyLTAzLTExLnR4dAotIFJldHVybmVkIGluY29ycmVjdCBlcnJvciAoWl9NRU1fRVJST1IpIG9uIHNvbWUgaW52YWxpZCBkYXRhCi0gQXZvaWQgYWNjZXNzZXMgYmVmb3JlIHdpbmRvdyBmb3IgaW52YWxpZCBkaXN0YW5jZXMgd2l0aCBpbmZsYXRlIHdpbmRvdwogIGxlc3MgdGhhbiAzMksuCi0gZm9yY2Ugd2luZG93Qml0cyA+IDggdG8gYXZvaWQgYSBidWcgaW4gdGhlIGVuY29kZXIgZm9yIGEgd2luZG93IHNpemUKICBvZiAyNTYgYnl0ZXMuIChBIGNvbXBsZXRlIGZpeCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAxLjEuNSkuCgkKQ2hhbmdlcyBpbiAxLjEuMyAoOSBKdWx5IDE5OTgpCi0gZml4ICJhbiBpbmZsYXRlIGlucHV0IGJ1ZmZlciBidWcgdGhhdCBzaG93cyB1cCBvbiByYXJlIGJ1dCBwZXJzaXN0ZW50CiAgb2NjYXNpb25zIiAoTWFyaykKLSBmaXggZ3pyZWFkIGFuZCBnenRlbGwgZm9yIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMgKERpZGllciBMZSBCb3RsYW4pCi0gZml4IGd6c2VlayguLi4sIFNFRUtfU0VUKSBpbiB3cml0ZSBtb2RlCi0gZml4IGNyYyBjaGVjayBhZnRlciBhIGd6ZWVrIChGcmFuayBGYXViZXJ0KQotIGZpeCBtaW5pdW56aXAgd2hlbiB0aGUgbGFzdCBlbnRyeSBpbiBhIHppcCBmaWxlIGlzIGl0c2VsZiBhIHppcCBmaWxlCiAgKEogTGlsbGdlKQotIGFkZCBjb250cmliL2FzbTU4NiBhbmQgY29udHJpYi9hc202ODYgKEJyaWFuIFJhaXRlcikKICBTZWUgaHR0cDovL3d3dy5tdXBwZXRsYWJzLmNvbS9+YnJlYWRib3gvc29mdHdhcmUvYXNzZW1ibHkuaHRtbAotIGFkZCBzdXBwb3J0IGZvciBEZWxwaGkgMyBpbiBjb250cmliL2RlbHBoaSAoQm9iIERlbGxhY2EpCi0gYWRkIHN1cHBvcnQgZm9yIEMrK0J1aWxkZXIgMyBhbmQgRGVscGhpIDMgaW4gY29udHJpYi9kZWxwaGkyIChEYXZpZGUgTW9yZXR0aSkKLSBkbyBub3QgZXhpdCBwcmVtYXR1cmVseSBpbiB1bnRneiBpZiAwIGF0IHN0YXJ0IG9mIGJsb2NrIChNYWdudXMgSG9sbWdyZW4pCi0gdXNlIG1hY3JvIEVYVEVSTiBpbnN0ZWFkIG9mIGV4dGVybiB0byBzdXBwb3J0IERMTCBmb3IgQmVPUyAoU2FuZGVyIFN0b2tzKQotIGFkZGVkIGEgRkFRIGZpbGUKCi0gU3VwcG9ydCBnemRvcGVuIG9uIE1hYyB3aXRoIE1ldHJvd2Vya3MgKEphc29uIExpbmhhcnQpCi0gRG8gbm90IHJlZGVmaW5lIEJ5dGUgb24gTWFjIChCcmFkIFBldHRpdCAmIEphc29uIExpbmhhcnQpCi0gZGVmaW5lIFNFRUtfRU5EIHRvbyBpZiBTRUVLX1NFVCBpcyBub3QgZGVmaW5lZCAoQWxiZXJ0IENoaW4tQS1Zb3VuZykKLSBhdm9pZCBzb21lIHdhcm5pbmdzIHdpdGggQm9ybGFuZCBDIChUb20gVGFubmVyKQotIGZpeCBhIHByb2JsZW0gaW4gY29udHJpYi9taW5pemlwL3ppcC5jIGZvciAxNi1iaXQgTVNET1MgKEdpbGxlcyBWb2xsYW50KQotIGVtdWxhdGUgdXRpbWUoKSBmb3IgV0lOMzIgaW4gY29udHJpYi91bnRneiAgKEdpbGxlcyBWb2xsYW50KQotIGFsbG93IHNldmVyYWwgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZSAoVGltIE1vb25leSwgRnJvZG8gTG9vaWphYXJkKQotIHVzZSBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgaW4gTWFrZWZpbGUuaW4gKFRpbSBNb29uZXkpCi0gc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIG9uIE9TRjEgVjQgKFRpbSBNb29uZXkpCi0gcmVtb3ZlIHNvX2xvY2F0aW9ucyBpbiAibWFrZSBjbGVhbiIgIChUaW0gTW9vbmV5KQotIGZpeCBtYWtldHJlZS5jIGNvbXBpbGF0aW9uIGVycm9yIChHbGVubiwgTWFyaykKLSBQeXRob24gaW50ZXJmYWNlIHRvIHpsaWIgbm93IGluIFB5dGhvbiAxLjUgKEplcmVteSBIeWx0b24pCi0gbmV3IE1ha2VmaWxlLnJpc2NvcyAoUmljaCBXYWxrZXIpCi0gaW5pdGlhbGl6ZSBzdGF0aWMgZGVzY3JpcHRvcnMgaW4gdHJlZXMuYyBmb3IgZW1iZWRkZWQgdGFyZ2V0cyAoTmljayBTbWl0aCkKLSB1c2UgImZvby1neiIgaW4gZXhhbXBsZS5jIGZvciBSSVNDT1MgYW5kIFZNUyAoTmljayBTbWl0aCkKLSBhZGQgdGhlIE9TLzIgZmlsZXMgaW4gTWFrZWZpbGUuaW4gdG9vIChBbmRyZXcgWmFib2xvdG55KQotIGZpeCBmZG9wZW4gYW5kIGhhbGxvYyBtYWNyb3MgZm9yIE1pY3Jvc29mdCBDIDYuMCAoVG9tIExhbmUpCi0gZml4IG1ha2V0cmVlLmMgdG8gYWxsb3cgY2xlYW4gY29tcGlsYXRpb24gb2YgaW5mZml4ZWQuaCAoTWFyaykKLSBmaXggcGFyYW1ldGVyIGNoZWNrIGluIGRlZmxhdGVDb3B5IChHdW50aGVyIE5pa2wpCi0gY2xlYW51cCB0cmVlcy5jLCB1c2UgY29tcHJlc3NlZF9sZW4gb25seSBpbiBkZWJ1ZyBtb2RlIChDaHJpc3RpYW4gU3BpZWxlcikKLSBNYW55IHBvcnRhYmlsaXR5IHBhdGNoZXMgYnkgQ2hyaXN0aWFuIFNwaWVsZXI6CiAgLiB6dXRpbC5jLCB6dXRpbC5oOiBhZGRlZCAiY29uc3QiIGZvciB6bWVtKgogIC4gTWFrZV92bXMuY29tOiBmaXhlZCBzb21lIHR5cG9zCiAgLiBNYWtlX3Ztcy5jb206IG1zZG9zL01ha2VmaWxlLio6IHJlbW92ZWQgenV0aWwuaCBmcm9tIHNvbWUgZGVwZW5kZW5jeSBsaXN0cwogIC4gbXNkb3MvTWFrZWZpbGUubXNjOiByZW1vdmUgImRlZmF1bHQgcnRsIGxpbmsgbGlicmFyeSIgaW5mbyBmcm9tIG9iaiBmaWxlcwogIC4gbXNkb3MvTWFrZWZpbGUuKjogdXNlIG1vZGVsLWRlcGVuZGVudCBuYW1lIGZvciB0aGUgYnVpbHQgemxpYiBsaWJyYXJ5CiAgLiBtc2Rvcy9NYWtlZmlsZS5lbXgsIG50L01ha2VmaWxlLmVteCwgbnQvTWFrZWZpbGUuZ2NjOgogICAgIG5ldyBtYWtlZmlsZXMsIGZvciBlbXggKERPUy9PUzIpLCBlbXgmcnN4bnQgYW5kIG1pbmd3MzIgKFdpbmRvd3MgOXggLyBOVCkKLSB1c2UgZGVmaW5lIGluc3RlYWQgb2YgdHlwZWRlZiBmb3IgQnl0ZWYgYWxzbyBmb3IgTVNDIHNtYWxsL21lZGl1bSAoVG9tIExhbmUpCi0gcmVwbGFjZSBfX2ZhciB3aXRoIF9mYXIgZm9yIGJldHRlciBwb3J0YWJpbGl0eSAoQ2hyaXN0aWFuIFNwaWVsZXIsIFRvbSBMYW5lKQotIGZpeCB0ZXN0IGZvciBlcnJuby5oIGluIGNvbmZpZ3VyZSAoVGltIE5ld3NoYW0pCgpDaGFuZ2VzIGluIDEuMS4yICgxOSBNYXJjaCA5OCkKLSBhZGRlZCBjb250cmliL21pbnppcCwgbWluaSB6aXAgYW5kIHVuemlwIGJhc2VkIG9uIHpsaWIgKEdpbGxlcyBWb2xsYW50KQogIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL3VuemlwLmh0bWwKLSBwcmVpbml0aWFsaXplIHRoZSBpbmZsYXRlIHRhYmxlcyBmb3IgZml4ZWQgY29kZXMsIHRvIG1ha2UgdGhlIGNvZGUKICBjb21wbGV0ZWx5IHRocmVhZCBzYWZlIChNYXJrKQotIHNvbWUgc2ltcGxpZmljYXRpb25zIGFuZCBzbGlnaHQgc3BlZWQtdXAgdG8gdGhlIGluZmxhdGUgY29kZSAoTWFyaykKLSBmaXggZ3plb2Ygb24gbm9uLWNvbXByZXNzZWQgZmlsZXMgKEFsbGFuIFNjaHJ1bSkKLSBhZGQgLXN0ZDEgb3B0aW9uIGluIGNvbmZpZ3VyZSBmb3IgT1NGMSB0byBmaXggZ3pwcmludGYgKE1hcnRpbiBNb2tyZWpzKQotIHVzZSBkZWZhdWx0IHZhbHVlIG9mIDRLIGZvciBaX0JVRlNJWkUgZm9yIDE2LWJpdCBNU0RPUyAoVGltIFdlZ25lciArIEdsZW5uKQotIGFkZGVkIG9zMi9NYWtlZmlsZS5kZWYgYW5kIG9zMi96bGliLmRlZiAoQW5kcmV3IFphYm9sb3RueSkKLSBhZGQgc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBVTklYX1NWNC4yTVAgKE1BVFNVVVJBIFRha2Fub3JpKQotIGRvIG5vdCB3cmFwIGV4dGVybiAiQyIgYXJvdW5kIHN5c3RlbSBpbmNsdWRlcyAoVG9tIExhbmUpCi0gbWVudGlvbiB6bGliIGJpbmRpbmcgZm9yIFRDTCBpbiBSRUFETUUgKEFuZHJlYXMgS3VwcmllcykKLSBhZGRlZCBhbWlnYS9NYWtlZmlsZS5wdXAgZm9yIEFtaWdhIHBvd2VyVVAgU0FTL0MgUFBDIChBbmRyZWFzIEtsZWluZXJ0KQotIGFsbG93ICJtYWtlIGluc3RhbGwgcHJlZml4PS4uLiIgZXZlbiBhZnRlciBjb25maWd1cmUgKEdsZW5uIFJhbmRlcnMtUGVocnNvbikKLSBhbGxvdyAiY29uZmlndXJlIC0tcHJlZml4ICRIT01FIiAoVGltIE1vb25leSkKLSByZW1vdmUgd2FybmluZ3MgaW4gZXhhbXBsZS5jIGFuZCBnemlvLmMgKEdsZW5uIFJhbmRlcnMtUGVocnNvbikKLSBtb3ZlIE1ha2VmaWxlLnNhcyB0byBhbWlnYS9NYWtlZmlsZS5zYXMKCkNoYW5nZXMgaW4gMS4xLjEgKDI3IEZlYiA5OCkKLSBmaXggbWFjcm9zIF90cl90YWxseV8qIGluIGRlZmxhdGUuaCBmb3IgZGVidWcgbW9kZSAgKEdsZW5uIFJhbmRlcnMtUGVocnNvbikKLSByZW1vdmUgYmxvY2sgdHJ1bmNhdGlvbiBoZXVyaXN0aWMgd2hpY2ggaGFkIHZlcnkgbWFyZ2luYWwgZWZmZWN0IGZvciB6bGliCiAgKHNtYWxsZXIgbGl0X2J1ZnNpemUgdGhhbiBpbiBnemlwIDEuMi40KSBhbmQgZGVncmFkZWQgYSBsaXR0bGUgdGhlCiAgY29tcHJlc3Npb24gcmF0aW8gb24gc29tZSBmaWxlcy4gVGhpcyBhbHNvIGFsbG93cyBpbmxpbmluZyBfdHJfdGFsbHkgZm9yCiAgbWF0Y2hlcyBpbiBkZWZsYXRlX3Nsb3cuCi0gYWRkZWQgbXNkb3MvTWFrZWZpbGUudzMyIGZvciBXSU4zMiBNaWNyb3NvZnQgVmlzdWFsIEMrKyAoQm9iIEZyYXppZXIpCgpDaGFuZ2VzIGluIDEuMS4wICgyNCBGZWIgOTgpCi0gZG8gbm90IHJldHVybiBTVFJFQU1fRU5EIHByZW1hdHVyZWx5IGluIGluZmxhdGUgKEpvaG4gQm93bGVyKQotIHJldmVydCB0byB0aGUgemxpYiAxLjAuOCBpbmZsYXRlIHRvIGF2b2lkIHRoZSBnY2MgMi44LjAgYnVnIChKZXJlbXkgQnVobGVyKQotIGNvbXBpbGUgd2l0aCAtREZBU1RFU1QgdG8gZ2V0IGNvbXByZXNzaW9uIGNvZGUgb3B0aW1pemVkIGZvciBzcGVlZCBvbmx5Ci0gaW4gbWluaWd6aXAsIHRyeSBtbWFwJ2luZyB0aGUgaW5wdXQgZmlsZSBmaXJzdCAoTWlndWVsIEFsYnJlY2h0KQotIGluY3JlYXNlIHNpemUgb2YgSS9PIGJ1ZmZlcnMgaW4gbWluaWd6aXAuYyBhbmQgZ3ppby5jIChub3QgYSBiaWcgZ2FpbgogIG9uIFN1biBidXQgc2lnbmlmaWNhbnQgb24gSFApCgotIGFkZCBhIHBvaW50ZXIgdG8gZXhwZXJpbWVudGFsIHVuemlwIGxpYnJhcnkgaW4gUkVBRE1FIChHaWxsZXMgVm9sbGFudCkKLSBpbml0aWFsaXplIHZhcmlhYmxlIGdjYyBpbiBjb25maWd1cmUgKENocmlzIEhlcmJvcnRoKQoKQ2hhbmdlcyBpbiAxLjAuOSAoMTcgRmViIDE5OTgpCi0gYWRkZWQgZ3pwdXRzIGFuZCBnemdldHMgZnVuY3Rpb25zCi0gZG8gbm90IGNsZWFyIGVvZiBmbGFnIGluIGd6c2VlayAoTWFyayBEaWVraGFucykKLSBmaXggZ3pzZWVrIGZvciBmaWxlcyBpbiB0cmFuc3BhcmVudCBtb2RlIChNYXJrIERpZWtoYW5zKQotIGRvIG5vdCBhc3N1bWUgdGhhdCB2c3ByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAoSmVucyBLcmlua2UpCi0gcmVwbGFjZSBFWFBPUlQgd2l0aCBaRVhQT1JUIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggb3RoZXIgcHJvZ3JhbXMKLSBhZGRlZCBjb21wcmVzczIgaW4gemNvbmYuaCwgemxpYi5kZWYsIHpsaWIuZG50Ci0gbmV3IGFzbSBjb2RlIGZyb20gR2lsbGVzIFZvbGxhbnQgaW4gY29udHJpYi9hc20zODYKLSBzaW1wbGlmeSB0aGUgaW5mbGF0ZSBjb2RlIChNYXJrKToKIC4gUmVwbGFjZSBaQUxMT0MncyBpbiBodWZ0X2J1aWxkKCkgd2l0aCBzaW5nbGUgWkFMTE9DIGluIGluZmxhdGVfYmxvY2tzX25ldygpCiAuIFpBTExPQyB0aGUgbGVuZ3RoIGxpc3QgaW4gaW5mbGF0ZV90cmVlc19maXhlZCgpIGluc3RlYWQgb2YgdXNpbmcgc3RhY2sKIC4gWkFMTE9DIHRoZSB2YWx1ZSBhcmVhIGZvciBodWZ0X2J1aWxkKCkgaW5zdGVhZCBvZiB1c2luZyBzdGFjawogLiBTaW1wbGlmeSBaX0ZJTklTSCBjaGVjayBpbiBpbmZsYXRlKCkKCi0gQXZvaWQgZ2NjIDIuOC4wIGNvbXBhcmlzb24gYnVnIGEgbGl0dGxlIGRpZmZlcmVudGx5IHRoYW4gemxpYiAxLjAuOAotIGluIGluZnRyZWVzLmMsIGF2b2lkIGNjIC1PIGJ1ZyBvbiBIUCAoRmFyc2hpZCBFbGFoaSkKLSBpbiB6Y29uZi5oIG1vdmUgdGhlIFpMSUJfRExMIHN0dWZmIGVhcmxpZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAogIHRoZSBkZWNsYXJhdGlvbiBvZiBGQVIgKEdpbGxlcyBWT2xsYW50KQotIGluc3RhbGwgbGliei5zbyogd2l0aCBtb2RlIDc1NSAoZXhlY3V0YWJsZSkgaW5zdGVhZCBvZiA2NDQgKE1hcmMgTGVobWFubikKLSByZWFkX2J1ZiBidWYgcGFyYW1ldGVyIG9mIHR5cGUgQnl0ZWYqIGluc3RlYWQgb2YgY2hhcmYqCi0gem1lbWNweSBwYXJhbWV0ZXJzIGFyZSBvZiB0eXBlIEJ5dGVmKiwgbm90IGNoYXJmKiAoSm9zZXBoIFN0cm91dCkKLSBkbyBub3QgcmVkZWNsYXJlIHVubGluayBpbiBtaW5pZ3ppcC5jIGZvciBXSU4zMiAoSm9obiBCb3dsZXIpCi0gZml4IGNoZWNrIGZvciBwcmVzZW5jZSBvZiBkaXJlY3RvcmllcyBpbiAibWFrZSBpbnN0YWxsIiAoSWFuIFdpbGxpcykKCkNoYW5nZXMgaW4gMS4wLjggKDI3IEphbiAxOTk4KQotIGZpeGVkIG9mZnNldHMgaW4gY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20gKEdpbGxlcyBWb2xsYW50KQotIGZpeCBnemdldGMgYW5kIGd6cHV0YyBmb3IgYmlnIGVuZGlhbiBzeXN0ZW1zIChNYXJrdXMgT2Jlcmh1bWVyKQotIGFkZGVkIGNvbXByZXNzMigpIHRvIGFsbG93IHNldHRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsCi0gaW5jbHVkZSBzeXMvdHlwZXMuaCB0byBnZXQgb2ZmX3Qgb24gc29tZSBzeXN0ZW1zIChNYXJjIExlaG1hbm4gJiBRaW5nTG9uZykKLSB1c2UgY29uc3RhbnQgYXJyYXlzIGZvciB0aGUgc3RhdGljIHRyZWVzIGluIHRyZWVzLmMgaW5zdGVhZCBvZiBjb21wdXRpbmcKICB0aGVtIGF0IHJ1biB0aW1lICh0aGFua3MgdG8gS2VuIFJhZWJ1cm4gZm9yIHRoaXMgc3VnZ2VzdGlvbikuIFRvIGNyZWF0ZQogIHRyZWVzLmgsIGNvbXBpbGUgd2l0aCBHRU5fVFJFRVNfSCBhbmQgcnVuICJtYWtlIHRlc3QiLgotIGNoZWNrIHJldHVybiBjb2RlIG9mIGV4YW1wbGUgaW4gIm1ha2UgdGVzdCIgYW5kIGRpc3BsYXkgcmVzdWx0Ci0gcGFzcyBtaW5pZ3ppcCBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byBmaWxlX2NvbXByZXNzCi0gc2ltcGxpZnlpbmcgY29kZSBvZiBpbmZsYXRlU3luYyB0byBhdm9pZCBnY2MgMi44IGJ1ZwoKLSBzdXBwb3J0IENDPSJnY2MgLVdhbGwiIGluIGNvbmZpZ3VyZSAtcyAoUWluZ0xvbmcpCi0gYXZvaWQgYSBmbHVzaCBjYXVzZWQgYnkgZnRlbGwgaW4gZ3pvcGVuIGZvciB3cml0ZSBtb2RlIChLZW4gUmFlYnVybikKLSBmaXggdGVzdCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncwotIHpsaWIubGliIC0+IHpsaWIuZGxsIGluIG1zZG9zL3psaWIucmMgKEdpbGxlcyBWb2xsYW50KQotIGNoZWNrIGZvciBUQVJHRVRfT1NfTUFDIGluIGFkZGl0aW9uIHRvIE1BQ09TIChCcmFkIFBldHRpdCkKLSBkbyBub3QgdXNlIGZkb3BlbiBmb3IgTWV0cm93ZXJrcyBvbiBNYWMgKEJyYWQgUGV0dGl0KSkKLSBhZGQgY2hlY2tzIGZvciBnenB1dGMgYW5kIGd6cHV0YyBpbiBleGFtcGxlLmMKLSBhdm9pZCB3YXJuaW5ncyBpbiBnemlvLmMgYW5kIGRlZmxhdGUuYyAoQW5kcmVhcyBLbGVpbmVydCkKLSB1c2UgY29uc3QgZm9yIHRoZSBDUkMgdGFibGUgKEtlbiBSYWVidXJuKQotIGZpeGVkICJtYWtlIHVuaW5zdGFsbCIgZm9yIHNoYXJlZCBsaWJyYXJpZXMKLSB1c2UgVHJhY2V2IGluc3RlYWQgb2YgVHJhY2UgaW4gaW5mYmxvY2suYwotIGluIGV4YW1wbGUuYyB1c2UgY29ycmVjdCBjb21wcmVzc2VkIGxlbmd0aCBmb3IgdGVzdF9zeW5jCi0gc3VwcHJlc3MgK3Zub2NvbXBhdHdhcm5pbmdzIGluIGNvbmZpZ3VyZSBmb3IgSFBVWCAobm90IGFsd2F5cyBzdXBwb3J0ZWQpCgpDaGFuZ2VzIGluIDEuMC43ICgyMCBKYW4gMTk5OCkKLSBmaXggZ3pzZWVrIHdoaWNoIHdhcyBicm9rZW4gaW4gd3JpdGUgbW9kZQotIHJldHVybiBlcnJvciBmb3IgZ3pzZWVrIHRvIG5lZ2F0aXZlIGFic29sdXRlIHBvc2l0aW9uCi0gZml4IGNvbmZpZ3VyZSBmb3IgTGludXggKENodW4tQ2h1bmcgQ2hlbikKLSBpbmNyZWFzZSBzdGFjayBzcGFjZSBmb3IgTVNDIChUaW0gV2VnbmVyKQotIGdldF9jcmNfdGFibGUgYW5kIGluZmxhdGVTeW5jUG9pbnQgYXJlIEVYUE9SVGVkIChHaWxsZXMgVm9sbGFudCkKLSBkZWZpbmUgRVhQT1JUVkEgZm9yIGd6cHJpbnRmIChHaWxsZXMgVm9sbGFudCkKLSBhZGRlZCBtYW4gcGFnZSB6bGliLjMgKFJpY2sgUm9kZ2VycykKLSBmb3IgY29udHJpYi91bnRneiwgZml4IG1ha2VkaXIoKSBhbmQgaW1wcm92ZSBNYWtlZmlsZQoKLSBjaGVjayBnenNlZWsgaW4gd3JpdGUgbW9kZSBpbiBleGFtcGxlLmMKLSBhbGxvY2F0ZSBleHRyYSBidWZmZXIgZm9yIHNlZWtzIG9ubHkgaWYgZ3pzZWVrIGlzIGFjdHVhbGx5IGNhbGxlZAotIGF2b2lkIHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29ucyAoVGltIFdlZ25lciwgR2lsbGVzIFZvbGxhbnQpCi0gYWRkIGluZmxhdGVTeW5jUG9pbnQgaW4gemNvbmYuaAotIGZpeCBsaXN0IG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBudC96bGliLmRudCBhbmQgbWRzb3MvemxpYi5kZWYKCkNoYW5nZXMgaW4gMS4wLjYgKDE5IEphbiAxOTk4KQotIGFkZCBmdW5jdGlvbnMgZ3pwcmludGYsIGd6cHV0YywgZ3pnZXRjLCBnenRlbGwsIGd6ZW9mLCBnenNlZWssIGd6cmV3aW5kIGFuZAogIGd6c2V0cGFyYW1zICh0aGFua3MgdG8gUm9sYW5kIEdpZXJzaWcgYW5kIEtldmluIFJ1bGFuZCBmb3Igc29tZSBvZiB0aGlzIGNvZGUpCi0gRml4IGEgZGVmbGF0ZSBidWcgb2NjdXJpbmcgb25seSB3aXRoIGNvbXByZXNzaW9uIGxldmVsIDAgKHRoYW5rcyB0bwogIEFuZHkgQnVja2xlciBmb3IgZmluZGluZyB0aGlzIG9uZSkuCi0gSW4gbWluaWd6aXAsIHBhc3MgdHJhbnNwYXJlbnRseSBhbHNvIHRoZSBmaXJzdCBieXRlIGZvciAuWiBmaWxlcy4KLSByZXR1cm4gWl9CVUZfRVJST1IgaW5zdGVhZCBvZiBaX09LIGlmIG91dHB1dCBidWZmZXIgZnVsbCBpbiB1bmNvbXByZXNzKCkKLSBjaGVjayBaX0ZJTklTSCBpbiBpbmZsYXRlICh0aGFua3MgdG8gTWFyYyBTY2hsdXBlcikKLSBJbXBsZW1lbnQgZGVmbGF0ZUNvcHkgKHRoYW5rcyB0byBBZGFtIENvc3RlbGxvKQotIG1ha2Ugc3RhdGljIGxpYnJhcmllcyBieSBkZWZhdWx0IGluIGNvbmZpZ3VyZSwgYWRkIC0tc2hhcmVkIG9wdGlvbi4KLSBtb3ZlIE1TRE9TIG9yIFdpbmRvd3Mgc3BlY2lmaWMgZmlsZXMgdG8gZGlyZWN0b3J5IG1zZG9zCi0gc3VwcHJlc3MgdGhlIG5vdGlvbiBvZiBwYXJ0aWFsIGZsdXNoIHRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UKICAoYnV0IHRoZSBzeW1ib2wgWl9QQVJUSUFMX0ZMVVNIIGlzIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCAxLjAuNCkKLSBzdXBwcmVzcyBoaXN0b3J5IGJ1ZmZlciBwcm92aWRlZCBieSBhcHBsaWNhdGlvbiB0byBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlCiAgKHRoaXMgZmVhdHVyZSB3YXMgbm90IGltcGxlbWVudGVkIGFueXdheSBpbiAxLjAuNCkKLSBuZXh0X2luIGFuZCBhdmFpbF9pbiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGluZmxhdGVJbml0IG9yCiAgaW5mbGF0ZUluaXQyCi0gYWRkIEVYUE9SVCBpbiBhbGwgZXhwb3J0ZWQgZnVuY3Rpb25zIChmb3IgV2luZG93cyBETEwpCi0gYWRkZWQgTWFrZWZpbGUubnQgKHRoYW5rcyB0byBTdGVwaGVuIFdpbGxpYW1zKQotIGFkZGVkIHRoZSB1bnN1cHBvcnRlZCAiY29udHJpYiIgZGlyZWN0b3J5OgogICBjb250cmliL2FzbTM4Ni8gYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29tPgoJMzg2IGFzbSBjb2RlIHJlcGxhY2luZyBsb25nZXN0X21hdGNoKCkuCiAgIGNvbnRyaWIvaW9zdHJlYW0vIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgogICAgICAgIEEgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZSB0byB0aGUgemxpYiBneiogZnVuY3Rpb25zCiAgIGNvbnRyaWIvaW9zdHJlYW0yLyAgYnkgVHlnZSBM+HZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4KCUFub3RoZXIgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZQogICBjb250cmliL3VudGd6LyAgYnkgIlBlZHJvIEEuIEFyYW5kYSBHdXRpXGlycmV6IiA8cGFhZ0B0aWQuZXM+CglBIHZlcnkgc2ltcGxlIHRhci5neiBmaWxlIGV4dHJhY3RvciB1c2luZyB6bGliCiAgIGNvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dCBieSBDYXJsb3MgUmlvcyA8Y19yaW9zQHNvbmRhLmNsPgogICAgICAgIEhvdyB0byB1c2UgY29tcHJlc3MoKSwgdW5jb21wcmVzcygpIGFuZCB0aGUgZ3oqIGZ1bmN0aW9ucyBmcm9tIFZCLgotIHBhc3MgcGFyYW1zIC1mIChmaWx0ZXJlZCBkYXRhKSwgLWggKGh1ZmZtYW4gb25seSksIC0xIHRvIC05IChjb21wcmVzc2lvbgogIGxldmVsKSBpbiBtaW5pZ3ppcCAodGhhbmtzIHRvIFRvbSBMYW5lKQoKLSB1c2UgY29uc3QgZm9yIHJvbW1hYmxlIGNvbnN0YW50cyBpbiBkZWZsYXRlCi0gYWRkZWQgdGVzdCBmb3IgZ3pzZWVrIGFuZCBnenRlbGwgaW4gZXhhbXBsZS5jCi0gYWRkIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbmZsYXRlU3luY1BvaW50KCkgKGhhY2sgZm9yIFBhdWwgTWFja2VycmFzKQotIGFkZCB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gekVycm9yIHRvIGNvbnZlcnQgZXJyb3IgY29kZSB0byBzdHJpbmcKICAoZm9yIFRpbSBTbWl0aGVycykKLSBBbGxvdyBjb21waWxhdGlvbiBvZiBnemlvIHdpdGggLUROT19ERUZMQVRFIHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlLgotIFVzZSBkZWZhdWx0IG1lbWNweSBmb3IgU3ltYW50ZWMgTVNET1MgY29tcGlsZXIuCi0gQWRkIEVYUE9SVCBrZXl3b3JkIGZvciBjaGVja19mdW5jIChuZWVkZWQgZm9yIFdpbmRvd3MgRExMKQotIGFkZCBjdXJyZW50IGRpcmVjdG9yeSB0byBMRF9MSUJSQVJZX1BBVEggZm9yICJtYWtlIHRlc3QiCi0gY3JlYXRlIGFsc28gYSBsaW5rIGZvciBsaWJ6LnNvLjEKLSBhZGRlZCBzdXBwb3J0IGZvciBGVUpJVFNVIFVYUC9EUyAodGhhbmtzIHRvIFRvc2hpYWtpIE5vbXVyYSkKLSB1c2UgJChTSEFSRURMSUIpIGluc3RlYWQgb2YgbGliei5zbyBpbiBNYWtlZmlsZS5pbiAoZm9yIEhQVVgpCi0gYWRkZWQgLXNvbmFtZSBmb3IgTGludXggaW4gY29uZmlndXJlIChDaHVuLUNodW5nIENoZW4sCi0gYXNzaWduIG51bWJlcnMgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB6bGliLmRlZiAoZm9yIFdpbmRvd3MgRExMKQotIGFkZCBhZHZpY2UgaW4gemxpYi5oIGZvciBiZXN0IHVzYWdlIG9mIGRlZmxhdGVTZXREaWN0aW9uYXJ5Ci0gd29yayBhcm91bmQgY29tcGlsZXIgYnVnIG9uIEF0YXJpIChjYXN0IFpfTlVMTCBpbiBjYWxsIG9mIHMtPmNoZWNrZm4pCi0gYWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCBmb3IgVHVyYm9DIGluIGxhcmdlIG1vZGVsCi0gYXZvaWQgInZlcnNpb25TdHJpbmciWzBdIChCb3JsYW5kIGJ1ZykKLSBhZGQgTkVFRF9EVU1NWV9SRVRVUk4gZm9yIEJvcmxhbmQKLSB1c2UgdmFyaWFibGUgel92ZXJib3NlIGZvciB0cmFjaW5nIGluIGRlYnVnIG1vZGUgKEwuIFBldGVyIERldXRzY2gpLgotIGFsbG93IGNvbXBpbGF0aW9uIHdpdGggQ0MKLSBkZWZpbmVkIFNUREMgZm9yIE9TLzIgKERhdmlkIENoYXJsYXApCQotIGxpbWl0IGV4dGVybmFsIG5hbWVzIHRvIDggY2hhcnMgZm9yIE1WUyAoVGhvbWFzIEx1bmQpCi0gaW4gbWluaWd6aXAuYywgdXNlIHN0YXRpYyBidWZmZXJzIG9ubHkgZm9yIDE2LWJpdCBzeXN0ZW1zCi0gZml4IHN1ZmZpeCBjaGVjayBmb3IgIm1pbmlnemlwIC1kIGZvby5neiIKLSBkbyBub3QgcmV0dXJuIGFuIGVycm9yIGZvciB0aGUgMm5kIG9mIHR3byBjb25zZWN1dGl2ZSBnemZsdXNoKCkgKEZlbGl4IExlZSkKLSB1c2UgX2Zkb3BlbiBpbnN0ZWFkIG9mIGZkb3BlbiBmb3IgTVNDID49IDYuMCAoVGhvbWFzIEZhbnNsYXUpCi0gYWRkZWQgbWFrZWxjYy5iYXQgZm9yIGxjYy13aW4zMiAoVG9tIFN0IERlbmlzKQotIGluIE1ha2VmaWxlLmRqMiwgdXNlIGNvcHkgYW5kIGRlbCBpbnN0ZWFkIG9mIGluc3RhbGwgYW5kIHJtIChGcmFuayBEb25haG9lKQotIEF2b2lkIGV4cGFuZGVkICRJZDogQ2hhbmdlTG9nLHYgMS4yLjE2LjUuMi42IDIwMDMvMDIvMDUgMDM6MDE6MjggZ2RyIEV4cCAkLiBVc2UgInJjcyAta2IiIG9yICJjdnMgYWRtaW4gLWtiIiB0byBhdm9pZCBJZCBleHBhbnNpb24uCi0gY2hlY2sgZm9yIHVuaXN0ZC5oIGluIGNvbmZpZ3VyZSAoZm9yIG9mZl90KQotIHJlbW92ZSB1c2VsZXNzIGNoZWNrIHBhcmFtZXRlciBpbiBpbmZsYXRlX2Jsb2Nrc19mcmVlCi0gYXZvaWQgdXNlbGVzcyBhc3NpZ25tZW50IG9mIHMtPmNoZWNrIHRvIGl0c2VsZiBpbiBpbmZsYXRlX2Jsb2Nrc19uZXcKLSBkbyBub3QgZmx1c2ggdHdpY2UgaW4gZ3pjbG9zZSAodGhhbmtzIHRvIEtlbiBSYWVidXJuKQotIHJlbmFtZSBGT1BFTiBhcyBGX09QRU4gdG8gYXZvaWQgY2xhc2ggd2l0aCAvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaAotIHVzZSBOT19FUlJOT19IIGluc3RlYWQgb2YgZW51bWVyYXRpb24gb2Ygb3BlcmF0aW5nIHN5c3RlbXMgd2l0aCBlcnJuby5oCi0gd29yayBhcm91bmQgYnVnZ3kgZmNsb3NlIG9uIHBpcGVzIGZvciBIUC9VWAotIHN1cHBvcnQgemxpYiBETEwgd2l0aCBCT1JMQU5EIEMrKyA1LjAgKHRoYW5rcyB0byBHbGVubiBSYW5kZXJzLVBlaHJzb24pCi0gZml4IGNvbmZpZ3VyZSBpZiBDQyBpcyBhbHJlYWR5IGVxdWFsIHRvIGdjYwoKQ2hhbmdlcyBpbiAxLjAuNSAoMyBKYW4gOTgpCi0gRml4IGluZmxhdGUgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkgd2hlbiBmZWQgY29ycnVwdGVkIG9yIGludmFsaWQgZGF0YQotIFVzZSBjb25zdCBmb3Igcm9tbWFibGUgY29uc3RhbnRzIGluIGluZmxhdGUKLSBFbGltaW5hdGUgbWVtb3J5IGxlYWtzIG9uIGVycm9yIGNvbmRpdGlvbnMgaW4gaW5mbGF0ZQotIFJlbW92ZWQgc29tZSB2ZXN0aWdpYWwgY29kZSBpbiBpbmZsYXRlCi0gVXBkYXRlIHdlYiBhZGRyZXNzIGluIFJFQURNRQogIApDaGFuZ2VzIGluIDEuMC40ICgyNCBKdWwgOTYpCi0gSW4gdmVyeSByYXJlIGNvbmRpdGlvbnMsIGRlZmxhdGUocywgWl9GSU5JU0gpIGNvdWxkIGZhaWwgdG8gcHJvZHVjZSBhbiBFT0YKICBiaXQsIHNvIHRoZSBkZWNvbXByZXNzb3IgY291bGQgZGVjb21wcmVzcyBhbGwgdGhlIGNvcnJlY3QgZGF0YSBidXQgd2VudAogIG9uIHRvIGF0dGVtcHQgZGVjb21wcmVzc2luZyBleHRyYSBnYXJiYWdlIGRhdGEuIFRoaXMgYWZmZWN0ZWQgbWluaWd6aXAgdG9vLgotIHpsaWJWZXJzaW9uIGFuZCBnemVycm9yIHJldHVybiBjb25zdCBjaGFyKiAobmVlZGVkIGZvciBETEwpCi0gcG9ydCB0byBSSVNDT1MgKG5vIGZkb3Blbiwgbm8gbXVsdGlwbGUgZG90cywgbm8gdW5saW5rLCBubyBmaWxlbm8pCi0gdXNlIHpfZXJyb3Igb25seSBmb3IgREVCVUcgKGF2b2lkIHByb2JsZW0gd2l0aCBETExzKQoKQ2hhbmdlcyBpbiAxLjAuMyAoMiBKdWwgOTYpCi0gdXNlIHpfc3RyZWFtcCBpbnN0ZWFkIG9mIHpfc3RyZWFtICosIHdoaWNoIGlzIG5vdyBhIGZhciBwb2ludGVyIGluIE1TRE9TCiAgc21hbGwgYW5kIG1lZGl1bSBtb2RlbHM7IHRoaXMgbWFrZXMgdGhlIGxpYnJhcnkgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMKICB2ZXJzaW9ucyBmb3IgdGhlc2UgbW9kZWxzLiAoTm8gZWZmZWN0IGluIGxhcmdlIG1vZGVsIG9yIG9uIG90aGVyIHN5c3RlbXMuKQotIHJldHVybiBPSyBpbnN0ZWFkIG9mIEJVRl9FUlJPUiBpZiBwcmV2aW91cyBkZWZsYXRlIGNhbGwgcmV0dXJuZWQgd2l0aAogIGF2YWlsX291dCBhcyB6ZXJvIGJ1dCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvCi0gYWRkZWQgbWVtY21wIGZvciBub24gU1REQyBjb21waWxlcnMKLSBkZWZpbmUgTk9fRFVNTVlfREVDTCBmb3IgbW9yZSBNYWMgY29tcGlsZXJzICguaCBmaWxlcyBtZXJnZWQgaW5jb3JyZWN0bHkpCi0gZGVmaW5lIF9fMzJCSVRfXyBpZiBfXzM4Nl9fIG9yIGkzODYgaXMgZGVmaW5lZCAocGIuIHdpdGggV2F0Y29tIGFuZCBTQ08pCi0gYmV0dGVyIGNoZWNrIGZvciAxNi1iaXQgbW9kZSBNU0MgKGF2b2lkcyBwcm9ibGVtIHdpdGggU3ltYW50ZWMpCgpDaGFuZ2VzIGluIDEuMC4yICgyMyBNYXkgOTYpCi0gYWRkZWQgV2luZG93cyBETEwgc3VwcG9ydAotIGFkZGVkIGEgZnVuY3Rpb24gemxpYlZlcnNpb24gKGZvciB0aGUgRExMIHN1cHBvcnQpCi0gZml4ZWQgZGVjbGFyYXRpb25zIHVzaW5nIEJ5dGVmIGluIGluZnV0aWwuYyAocGIgd2l0aCBNU0RPUyBtZWRpdW0gbW9kZWwpCi0gQnl0ZWYgaXMgZGVmaW5lJ3MgaW5zdGVhZCBvZiB0eXBlZGVmJ2Qgb25seSBmb3IgQm9ybGFuZCBDCi0gYXZvaWQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGFtcGxlLmMKLSBtZW50aW9uIGluIFJFQURNRSB0aGF0IHRoZSB6bGliIGZvcm1hdCBpcyBub3cgUkZDMTk1MAotIHVwZGF0ZWQgTWFrZWZpbGUuZGoyCi0gYWRkZWQgYWxnb3JpdGhtLmRvYwoKQ2hhbmdlcyBpbiAxLjAuMSAoMjAgTWF5IDk2KSBbMS4wIHNraXBwZWQgdG8gYXZvaWQgY29uZnVzaW9uXQotIGZpeCBhcnJheSBvdmVybGF5IGluIGRlZmxhdGUuYyB3aGljaCBzb21ldGltZXMgY2F1c2VkIGJhZCBjb21wcmVzc2VkIGRhdGEKLSBmaXggaW5mbGF0ZSBidWcgd2l0aCBlbXB0eSBzdG9yZWQgYmxvY2sKLSBmaXggTVNET1MgbWVkaXVtIG1vZGVsIHdoaWNoIHdhcyBicm9rZW4gaW4gMC45OQotIGZpeCBkZWZsYXRlUGFyYW1zKCkgd2hpY2ggY291bGQgZ2VuZXJhdGVkIGJhZCBjb21wcmVzc2VkIGRhdGEuCi0gQnl0ZWYgaXMgZGVmaW5lJ2QgaW5zdGVhZCBvZiB0eXBlZGVmJ2VkICh3b3JrIGFyb3VuZCBCb3JsYW5kIGJ1ZykKLSBhZGRlZCBhbiBJTkRFWCBmaWxlCi0gbmV3IG1ha2VmaWxlcyBmb3IgREpHUFAgKE1ha2VmaWxlLmRqMiksIDMyLWJpdCBCb3JsYW5kIChNYWtlZmlsZS5iMzIpLAogIFdhdGNvbSAoTWFrZWZpbGUud2F0KSwgQW1pZ2EgU0FTL0MgKE1ha2VmaWxlLnNhcykKLSBzcGVlZCB1cCBhZGxlcjMyIGZvciBtb2Rlcm4gbWFjaGluZXMgd2l0aG91dCBhdXRvLWluY3JlbWVudAotIGFkZGVkIC1hbnNpIGZvciBJUklYIGluIGNvbmZpZ3VyZQotIHN0YXRpY19pbml0X2RvbmUgaW4gdHJlZXMuYyBpcyBhbiBpbnQKLSBkZWZpbmUgdW5saW5rIGFzIGRlbGV0ZSBmb3IgVk1TCi0gZml4IGNvbmZpZ3VyZSBmb3IgUU5YCi0gYWRkIGNvbmZpZ3VyZSBicmFuY2ggZm9yIFNDTyBhbmQgSFBVWAotIGF2b2lkIG1hbnkgd2FybmluZ3MgKHVudXNlZCB2YXJpYWJsZXMsIGRlYWQgYXNzaWdubWVudHMsIGV0Yy4uLikKLSBubyBmZG9wZW4gZm9yIEJlT1MKLSBmaXggdGhlIFdhdGNvbSBmaXggZm9yIDMyIGJpdCBtb2RlIChkZWZpbmUgRkFSIGFzIGVtcHR5KQotIHJlbW92ZWQgcmVkZWZpbml0aW9uIG9mIEJ5dGUgZm9yIE1LV0VSS1MKLSB3b3JrIGFyb3VuZCBhbiBNV0tFUktTIGJ1ZyAoaW5jb3JyZWN0IG1lcmdlIG9mIGFsbCAuaCBmaWxlcykKCkNoYW5nZXMgaW4gMC45OSAoMjcgSmFuIDk2KQotIGFsbG93IHByZXNldCBkaWN0aW9uYXJ5IHNoYXJlZCBiZXR3ZWVuIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvcgotIGFsbG93IGNvbXByZXNzaW9uIGxldmVsIDAgKG5vIGNvbXByZXNzaW9uKQotIGFkZCBkZWZsYXRlUGFyYW1zIGluIHpsaWIuaDogYWxsb3cgZHluYW1pYyBjaGFuZ2Ugb2YgY29tcHJlc3Npb24gbGV2ZWwKICBhbmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuCi0gdGVzdCBsYXJnZSBidWZmZXJzIGFuZCBkZWZsYXRlUGFyYW1zIGluIGV4YW1wbGUuYwotIGFkZCBvcHRpb25hbCAiY29uZmlndXJlIiB0byBidWlsZCB6bGliIGFzIGEgc2hhcmVkIGxpYnJhcnkKLSBzdXBwcmVzcyBNYWtlZmlsZS5xbngsIHVzZSBjb25maWd1cmUgaW5zdGVhZAotIGZpeGVkIGRlZmxhdGUgZm9yIDY0LWJpdCBzeXN0ZW1zIChkZXRlY3RlZCBvbiBDcmF5KQotIGZpeGVkIGluZmxhdGVfYmxvY2tzIGZvciA2NC1iaXQgc3lzdGVtcyAoZGV0ZWN0ZWQgb24gQWxwaGEpCi0gZGVjbGFyZSBaX0RFRkxBVEVEIGluIHpsaWIuaCAocG9zc2libGUgcGFyYW1ldGVyIGZvciBkZWZsYXRlSW5pdDIpCi0gYWx3YXlzIHJldHVybiBaX0JVRl9FUlJPUiB3aGVuIGRlZmxhdGUoKSBoYXMgbm90aGluZyB0byBkbwotIGRlZmxhdGVJbml0IGFuZCBpbmZsYXRlSW5pdCBhcmUgbm93IG1hY3JvcyB0byBhbGxvdyB2ZXJzaW9uIGNoZWNraW5nCi0gcHJlZml4IGFsbCBnbG9iYWwgZnVuY3Rpb25zIGFuZCB0eXBlcyB3aXRoIHpfIHdpdGggLURaX1BSRUZJWAotIG1ha2UgZmFsbG9jIGNvbXBsZXRlbHkgcmVlbnRyYW50IChpbmZ0cmVlcy5jKQotIGZpeGVkIHZlcnkgdW5saWtlbHkgcmFjZSBjb25kaXRpb24gaW4gY3Rfc3RhdGljX2luaXQKLSBmcmVlIGluIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbiB0byBoZWxwIG1lbW9yeSBtYW5hZ2VyCi0gdXNlIHpsaWItMS4wLyogaW5zdGVhZCBvZiB6bGliLyogaW5zaWRlIHRoZSB0YXIuZ3oKLSBtYWtlIHpsaWIgd2FybmluZy1mcmVlIHdpdGggImdjYyAtTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aAogIC1XY29udmVyc2lvbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIgotIGFsbG93IGd6cmVhZCBvbiBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzCi0gZGVmbGF0ZUVuZCBub3cgcmV0dXJucyBaX0RBVEFfRVJST1IgaWYgaXQgd2FzIHByZW1hdHVyZQotIGRlZmxhdGUgaXMgZmluYWxseSAoPykgZnVsbHkgZGV0ZXJtaW5pc3RpYyAobm8gbWF0Y2hlcyBiZXlvbmQgZW5kIG9mIGlucHV0KQotIERvY3VtZW50IFpfU1lOQ19GTFVTSAotIGFkZCB1bmluc3RhbGwgaW4gTWFrZWZpbGUKLSBDaGVjayBmb3IgX19jcGx1cGx1cyBpbiB6bGliLmgKLSBCZXR0ZXIgdGVzdCBpbiBjdF9hbGlnbiBmb3IgcGFydGlhbCBmbHVzaAotIGF2b2lkIGhhcm1sZXNzIHdhcm5pbmdzIGZvciBCb3JsYW5kIEMrKwotIGluaXRpYWxpemUgaGFzaF9oZWFkIGluIGRlZmxhdGUuYwotIGF2b2lkIHdhcm5pbmcgb24gZmRvcGVuIChnemlvLmMpIGZvciBIUCBjYyAtQWEKLSBpbmNsdWRlIHN0ZGxpYi5oIGZvciBTVERDIGNvbXBpbGVycwotIGluY2x1ZGUgZXJybm8uaCBmb3IgQ3JheQotIGlnbm9yZSBlcnJvciBpZiByYW5saWIgZG9lc24ndCBleGlzdAotIGNhbGwgcmFubGliIHR3aWNlIGZvciBOZVhUU1RFUAotIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mIHByZWZpeCBmb3IgbGliei5hCi0gcmVuYW1lZCBjdF8qIGFzIF90cl8qIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggYXBwbGljYXRpb25zCi0gY2xlYXIgei0+bXNnIGluIGluZmxhdGVJbml0MiBiZWZvcmUgYW55IGVycm9yIHJldHVybgotIGluaXRpYWxpemUgb3BhcXVlIGluIGV4YW1wbGUuYywgZ3ppby5jLCBkZWZsYXRlLmMgYW5kIGluZmxhdGUuYwotIGZpeGVkIHR5cG8gaW4gemNvbmYuaCAoX0dOVUNfXyA9PiBfX0dOVUNfXykKLSBjaGVjayBmb3IgV0lOMzIgaW4gemNvbmYuaCBhbmQgenV0aWwuYyAoYXZvaWQgZmFybWFsbG9jIGluIDMyLWJpdCBtb2RlKQotIGZpeCB0eXBvIGluIE1ha2Vfdm1zLmNvbSAoZiR0cm5sbm0gLT4gZiRnZXRzeWkpCi0gaW4gZmNhbGxvYywgbm9ybWFsaXplIHBvaW50ZXIgaWYgc2l6ZSA+IDY1NTIwIGJ5dGVzCi0gZG9uJ3QgdXNlIHNwZWNpYWwgZmNhbGxvYyBmb3IgMzIgYml0IEJvcmxhbmQgQysrCi0gdXNlIFNUREMgaW5zdGVhZCBvZiBfX0dPMzJfXyB0byBhdm9pZCByZWRlY2xhcmluZyBleGl0LCBjYWxsb2MsIGV0Yy4uLgotIHVzZSBaX0JJTkFSWSBpbnN0ZWFkIG9mIEJJTkFSWQotIGRvY3VtZW50IHRoYXQgZ3pjbG9zZSBhZnRlciBnemRvcGVuIHdpbGwgY2xvc2UgdGhlIGZpbGUKLSBhbGxvdyAiYSIgYXMgbW9kZSBpbiBnem9wZW4uCi0gZml4IGVycm9yIGNoZWNraW5nIGluIGd6cmVhZAotIGFsbG93IHNraXBwaW5nIC5neiBleHRyYS1maWVsZCBvbiBwaXBlcwotIGFkZGVkIHJlZmVyZW5jZSB0byBQZXJsIGludGVyZmFjZSBpbiBSRUFETUUKLSBwdXQgdGhlIGNyYyB0YWJsZSBpbiBGQVIgZGF0YSAoSSBkaXNsaWtlIG1vcmUgYW5kIG1vcmUgdGhlIG1lZGl1bSBtb2RlbCA6KQotIGFkZGVkIGdldF9jcmNfdGFibGUKLSBhZGRlZCBhIGRpbWVuc2lvbiB0byBhbGwgYXJyYXlzIChCb3JsYW5kIEMgY2FuJ3QgY291bnQpLgotIHdvcmthcm91bmQgQm9ybGFuZCBDIGJ1ZyBpbiBkZWNsYXJhdGlvbiBvZiBpbmZsYXRlX2NvZGVzX25ldyAmIGluZmxhdGVfZmFzdAotIGd1YXJkIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9uIG9mICouaCAoZm9yIHByZWNvbXBpbGVkIGhlYWRlciBvbiBNYWMpCi0gV2F0Y29tIEMgcHJldGVuZHMgdG8gYmUgTWljcm9zb2Z0IEMgc21hbGwgbW9kZWwgZXZlbiBpbiAzMiBiaXQgbW9kZS4KLSBkb24ndCB1c2UgdW5zaXplZCBhcnJheXMgdG8gYXZvaWQgc2lsbHkgd2FybmluZ3MgYnkgVmlzdWFsIEMrKzoKICAgICB3YXJuaW5nIEM0NzQ2OiAnaW5mbGF0ZV9tYXNrJyA6IHVuc2l6ZWQgYXJyYXkgdHJlYXRlZCBhcyAgJ19fZmFyJwogICAgICh3aGF0J3Mgd3Jvbmcgd2l0aCBmYXIgZGF0YSBpbiBmYXIgbW9kZWw/KS4KLSBkZWZpbmUgZW51bSBvdXQgb2YgaW5mbGF0ZV9ibG9ja3Nfc3RhdGUgdG8gYWxsb3cgY29tcGlsYXRpb24gd2l0aCBDKysKCkNoYW5nZXMgaW4gMC45NSAoMTYgQXVnIDk1KQotIGZpeCBNU0RPUyBzbWFsbCBhbmQgbWVkaXVtIG1vZGVsIChub3cgZWFzaWVyIHRvIGFkYXB0IHRvIGFueSBjb21waWxlcikKLSBpbmxpbmVkIHNlbmRfYml0cwotIGZpeCB0aGUgZmluYWwgKDotKSBidWcgZm9yIGRlZmxhdGUgd2l0aCBmbHVzaCAob3V0cHV0IHdhcyBjb3JyZWN0IGJ1dAogIG5vdCBjb21wbGV0ZWx5IGZsdXNoZWQgaW4gcmFyZSBvY2Nhc2lvbnMpLgotIGRlZmF1bHQgd2luZG93IHNpemUgaXMgc2FtZSBmb3IgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KICAoaXQncyBub3cgc3VmZmljaWVudCB0byBzZXQgTUFYX1dCSVRTIGluIHpjb25mLmgpLgotIHZvaWRwIC0+IHZvaWRwZiBhbmQgdm9pZG5wIC0+IHZvaWRwIChmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlcgogIHR5cGVkZWZzIGFuZCBiZWNhdXNlIHZvaWRucCB3YXMgbm90IG5lYXIgaW4gbGFyZ2UgbW9kZWwpLgoKQ2hhbmdlcyBpbiAwLjk0ICgxMyBBdWcgOTUpCi0gc3VwcG9ydCBNU0RPUyBtZWRpdW0gbW9kZWwKLSBmaXggZGVmbGF0ZSB3aXRoIGZsdXNoIChjb3VsZCBzb21ldGltZXMgZ2VuZXJhdGUgYmFkIG91dHB1dCkKLSBmaXggZGVmbGF0ZVJlc2V0ICh6bGliIGhlYWRlciB3YXMgaW5jb3JyZWN0bHkgc3VwcHJlc3NlZCkKLSBhZGRlZCBzdXBwb3J0IGZvciBWTVMKLSBhbGxvdyBhIGNvbXByZXNzaW9uIGxldmVsIGluIGd6b3BlbigpCi0gZ3pmbHVzaCBub3cgY2FsbHMgZmZsdXNoCi0gRm9yIGRlZmxhdGUgd2l0aCBmbHVzaCwgZmx1c2ggZXZlbiBpZiBubyBtb3JlIGlucHV0IGlzIHByb3ZpZGVkLgotIHJlbmFtZSBsaWJnei5hIGFzIGxpYnouYQotIGF2b2lkIGNvbXBsZXggZXhwcmVzc2lvbiBpbiBpbmZjb2Rlcy5jIHRyaWdnZXJpbmcgVHVyYm8gQyBidWcKLSB3b3JrIGFyb3VuZCBhIHByb2JsZW0gd2l0aCBnY2Mgb24gQWxwaGEgKGluIElOU0VSVF9TVFJJTkcpCi0gZG9uJ3QgdXNlIGlubGluZSBmdW5jdGlvbnMgKHByb2JsZW0gd2l0aCBzb21lIGdjYyB2ZXJzaW9ucykKLSBhbGxvdyByZW5hbWluZyBvZiBCeXRlLCB1SW50LCBldGMuLi4gd2l0aCAjZGVmaW5lLgotIGF2b2lkIHdhcm5pbmcgYWJvdXQgKHVudXNlZCkgcG9pbnRlciBiZWZvcmUgc3RhcnQgb2YgYXJyYXkgaW4gZGVmbGF0ZS5jCi0gYXZvaWQgdmFyaW91cyB3YXJuaW5ncyBpbiBnemlvLmMsIGV4YW1wbGUuYywgaW5mYmxvY2suYywgYWRsZXIzMi5jLCB6dXRpbC5jCi0gYXZvaWQgcmVzZXJ2ZWQgd29yZCAnbmV3JyBpbiB0cmVlcy5jCgpDaGFuZ2VzIGluIDAuOTMgKDI1IEp1bmUgOTUpCi0gdGVtcG9yYXJpbHkgZGlzYWJsZSBpbmxpbmUgZnVuY3Rpb25zCi0gbWFrZSBkZWZsYXRlIGRldGVybWluaXN0aWMKLSBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIFBBUlRJQUxfRkxVU0gKLSBTZXQgYmluYXJ5IG1vZGUgZm9yIHN0ZGluL3N0ZG91dCBpbiBtaW5pZ3ppcC5jIGZvciBPUy8yCi0gZG9uJ3QgZXZlbiB1c2Ugc2lnbmVkIGNoYXIgaW4gaW5mbGF0ZSAobm90IHBvcnRhYmxlIGVub3VnaCkKLSBmaXggaW5mbGF0ZSBtZW1vcnkgbGVhayBmb3Igc2VnbWVudGVkIGFyY2hpdGVjdHVyZXMKCkNoYW5nZXMgaW4gMC45MiAoMyBNYXkgOTUpCi0gZG9uJ3QgYXNzdW1lIHRoYXQgY2hhciBpcyBzaWduZWQgKHByb2JsZW0gb24gU0dJKQotIENsZWFyIGJpdCBidWZmZXIgd2hlbiBzdGFydGluZyBhIHN0b3JlZCBibG9jawotIG5vIG1lbWNweSBvbiBQeXJhbWlkCi0gc3VwcHJlc3NlZCBpbmZ0ZXN0LmMKLSBvcHRpbWl6ZWQgZmlsbF93aW5kb3csIHB1dCBsb25nZXN0X21hdGNoIGlubGluZSBmb3IgZ2NjCi0gb3B0aW1pemVkIGluZmxhdGUgb24gc3RvcmVkIGJsb2Nrcy4KLSB1bnRhYmlmeSBhbGwgc291cmNlcyB0byBzaW1wbGlmeSBwYXRjaGVzCgpDaGFuZ2VzIGluIDAuOTEgKDIgTWF5IDk1KQotIERlZmF1bHQgTUVNX0xFVkVMIGlzIDggKG5vdCA5IGZvciBVbml4KSBhcyBkb2N1bWVudGVkIGluIHpsaWIuaAotIERvY3VtZW50IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGluIHpjb25mLmgKLSBhZGRlZCAibWFrZSBpbnN0YWxsIgotIGZpeCBzeW5jIHNlYXJjaCBsb2dpYyBpbiBpbmZsYXRlU3luYwotIGRlZmxhdGUoWl9GVUxMX0ZMVVNIKSBub3cgd29ya3MgZXZlbiBpZiBvdXRwdXQgYnVmZmVyIHRvbyBzaG9ydAotIGFmdGVyIGluZmxhdGVTeW5jLCBkb24ndCBzY2FyZSBwZW9wbGUgd2l0aCBqdXN0ICJsbyB3b3JsZCIKLSBhZGRlZCBzdXBwb3J0IGZvciBESkdQUAoKQ2hhbmdlcyBpbiAwLjkgKDEgTWF5IDk1KQotIGRvbid0IGFzc3VtZSB0aGF0IHphbGxvYyBjbGVhcnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHRoZSBUdXJib0MgYnVnCiAgd2FzIE1hcmsncyBidWcgYWZ0ZXIgYWxsIDopCi0gbGV0IGFnYWluIGd6cmVhZCBjb3B5IHVuY29tcHJlc3NlZCBkYXRhIHVuY2hhbmdlZCAod2FzIHdvcmtpbmcgaW4gMC43MSkKLSBkZWZsYXRlKFpfRlVMTF9GTFVTSCksIGluZmxhdGVSZXNldCBhbmQgaW5mbGF0ZVN5bmMgYXJlIG5vdyBmdWxseSBpbXBsZW1lbnRlZAotIGFkZGVkIGEgdGVzdCBvZiBpbmZsYXRlU3luYyBpbiBleGFtcGxlLmMKLSBtb3ZlZCBNQVhfV0JJVFMgdG8gemNvbmYuaCBiZWNhdXNlIHVzZXJzIG1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoYXQuCi0gZG9jdW1lbnQgZXhwbGljaXRseSB0aGF0IHphbGxvYyg2NEspIG9uIE1TRE9TIG11c3QgcmV0dXJuIGEgbm9ybWFsaXplZAogIHBvaW50ZXIgKHplcm8gb2Zmc2V0KQotIGFkZGVkIE1ha2VmaWxlcyBmb3IgTWljcm9zb2Z0IEMsIFR1cmJvIEMsIEJvcmxhbmQgQysrCi0gZmFzdGVyIGNyYzMyKCkKCkNoYW5nZXMgaW4gMC44ICgyOSBBcHJpbCA5NSkKLSBhZGRlZCBmYXN0IGluZmxhdGUgKGluZmZhc3QuYykKLSBkZWZsYXRlKFpfRklOSVNIKSBub3cgcmV0dXJucyBaX1NUUkVBTV9FTkQgd2hlbiBkb25lLiBXYXJuaW5nOiB0aGlzCiAgaXMgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgemxpYiB3aGljaCByZXR1cm5lZCBaX09LLgotIHdvcmsgYXJvdW5kIGEgVHVyYm9DIGNvbXBpbGVyIGJ1ZyAoYmFkIGNvZGUgZm9yIGIgPDwgMCwgc2VlIGluZnV0aWwuaCkKICAoYWN0dWFsbHkgdGhhdCB3YXMgbm90IGEgY29tcGlsZXIgYnVnLCBzZWUgMC44MSBhYm92ZSkKLSBnenJlYWQgbm8gbG9uZ2VyIHJlYWRzIG9uZSBleHRyYSBieXRlIGluIGNlcnRhaW4gY2FzZXMKLSBJbiBnemlvIGRlc3Ryb3koKSwgZG9uJ3QgcmVmZXJlbmNlIGEgZnJlZWQgc3RydWN0dXJlCi0gYXZvaWQgbWFueSB3YXJuaW5ncyBmb3IgTVNET1MKLSBhdm9pZCB0aGUgRVJST1Igc3ltYm9sIHdoaWNoIGlzIHVzZWQgYnkgTVMgV2luZG93cwoKQ2hhbmdlcyBpbiAwLjcxICgxNCBBcHJpbCA5NSkKLSBGaXhlZCBtb3JlIE1TRE9TIGNvbXBpbGF0aW9uIHByb2JsZW1zIDooIFRoZXJlIGlzIHN0aWxsIGEgYnVnIHdpdGgKICBUdXJib0MgbGFyZ2UgbW9kZWwuCgpDaGFuZ2VzIGluIDAuNyAoMTQgQXByaWwgOTUpCi0gQWRkZWQgZnVsbCBpbmZsYXRlIHN1cHBvcnQuCi0gU2ltcGxpZmllZCB0aGUgY3JjMzIoKSBpbnRlcmZhY2UuIFRoZSBwcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZwogIChvbmUncyBjb21wbGVtZW50KSBpcyBub3cgZG9uZSBpbnNpZGUgY3JjMzIoKS4gV0FSTklORzogdGhpcyBpcwogIGluY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHZlcnNpb25zOyBzZWUgemxpYi5oIGZvciB0aGUgbmV3IHVzYWdlLgoKQ2hhbmdlcyBpbiAwLjYxICgxMiBBcHJpbCA5NSkKLSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBUdXJib0MuIGV4YW1wbGUgYW5kIG1pbmlnemlwIG5vdyB3b3JrIG9uIE1TRE9TLgoKQ2hhbmdlcyBpbiAwLjYgKDExIEFwcmlsIDk1KQotIGFkZGVkIG1pbmlnemlwLmMKLSBhZGRlZCBnemRvcGVuIHRvIHJlb3BlbiBhIGZpbGUgZGVzY3JpcHRvciBhcyBnekZpbGUKLSBhZGRlZCB0cmFuc3BhcmVudCByZWFkaW5nIG9mIG5vbi1nemlwZWQgZmlsZXMgaW4gZ3pyZWFkLgotIGZpeGVkIGJ1ZyBpbiBnenJlYWQgKGRvbid0IHJlYWQgY3JjIGFzIGRhdGEpCi0gZml4ZWQgYnVnIGluIGRlc3Ryb3kgKGd6aW8uYykgKGRvbid0IHJldHVybiBaX1NUUkVBTV9FTkQgZm9yIGd6Y2xvc2UpLgotIGRvbid0IGFsbG9jYXRlIGJpZyBhcnJheXMgaW4gdGhlIHN0YWNrIChmb3IgTVNET1MpCi0gZml4IHNvbWUgTVNET1MgY29tcGlsYXRpb24gcHJvYmxlbXMKCkNoYW5nZXMgaW4gMC41OgotIGRvIHJlYWwgY29tcHJlc3Npb24gaW4gZGVmbGF0ZS5jLiBaX1BBUlRJQUxfRkxVU0ggaXMgc3VwcG9ydGVkIGJ1dAogIG5vdCB5ZXQgWl9GVUxMX0ZMVVNILgotIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBidXQgb25seSBpbiBhIHNpbmdsZSBzdGVwIChmb3JjZWQgWl9GSU5JU0gpCi0gYWRkZWQgb3BhcXVlIG9iamVjdCBmb3IgemFsbG9jIGFuZCB6ZnJlZS4KLSBhZGRlZCBkZWZsYXRlUmVzZXQgYW5kIGluZmxhdGVSZXNldAotIGFkZGVkIGEgdmFyaWFibGUgemxpYl92ZXJzaW9uIGZvciBjb25zaXN0ZW5jeSBjaGVja2luZy4KLSByZW5hbWVkIHRoZSAnZmlsdGVyJyBwYXJhbWV0ZXIgb2YgZGVmbGF0ZUluaXQyIGFzICdzdHJhdGVneScuCiAgQWRkZWQgWl9GSUxURVJFRCBhbmQgWl9IVUZGTUFOX09OTFkgY29uc3RhbnRzLgoKQ2hhbmdlcyBpbiAwLjQ6Ci0gYXZvaWQgInppcCIgZXZlcnl3aGVyZSwgdXNlIHpsaWIgaW5zdGVhZCBvZiB6aXBsaWIuCi0gc3VwcHJlc3MgWl9CTE9DS19GTFVTSCwgaW50ZXJwcmV0IFpfUEFSVElBTF9GTFVTSCBhcyBibG9jayBmbHVzaAogIGlmIGNvbXByZXNzaW9uIG1ldGhvZCA9PSA4LgotIGFkZGVkIGFkbGVyMzIgYW5kIGNyYzMyCi0gcmVuYW1lZCBkZWZsYXRlT3B0aW9ucyBhcyBkZWZsYXRlSW5pdDIsIGNhbGwgb25lIG9yIHRoZSBvdGhlciBidXQgbm90IGJvdGgKLSBhZGRlZCB0aGUgbWV0aG9kIHBhcmFtZXRlciBmb3IgZGVmbGF0ZUluaXQyLgotIGFkZGVkIGluZmxhdGVJbml0MgotIHNpbXBsaWVkIGNvbnNpZGVyYWJseSBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQgYnkgbm90IHN1cHBvcnRpbmcKICB1c2VyLXByb3ZpZGVkIGhpc3RvcnkgYnVmZmVyLiBUaGlzIGlzIHN1cHBvcnRlZCBvbmx5IGluIGRlZmxhdGVJbml0MgogIGFuZCBpbmZsYXRlSW5pdDIuCgpDaGFuZ2VzIGluIDAuMzoKLSBwcmVmaXggYWxsIG1hY3JvIG5hbWVzIHdpdGggWl8KLSB1c2UgWl9GSU5JU0ggaW5zdGVhZCBvZiBkZWZsYXRlRW5kIHRvIGZpbmlzaCBjb21wcmVzc2lvbi4KLSBhZGRlZCBaX0hVRkZNQU5fT05MWQotIGFkZGVkIGd6ZXJyb3IoKQo=