PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDQuMCI+CjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+Cjx0aXRsZT5TaGFyZWQgQ29udGFpbmVyIEl0ZXJhdG9yIERvY3VtZW50YXRpb248L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KCjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0iYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIKYWxpZ249ImNlbnRlciIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+Cgo8aDE+U2hhcmVkIENvbnRhaW5lciBJdGVyYXRvcjwvaDE+CgpEZWZpbmVkIGluIGhlYWRlcgo8YSBocmVmPSIuLi8uLi9ib29zdC9zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yLmhwcCI+Ym9vc3Qvc2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvci5ocHA8L2E+Cgo8cD4KVGhlIHB1cnBvc2Ugb2YgdGhlIHNoYXJlZCBjb250YWluZXIgaXRlcmF0b3IgaXMgdG8gYXR0YWNoIHRoZSBsaWZldGltZQpvZiBhIGNvbnRhaW5lciB0byB0aGUgbGlmZXRpbWUgb2YgaXRzIGl0ZXJhdG9ycy4gSW4gb3RoZXIgd29yZHMsIHRoZQpjb250YWluZXIgd2lsbCBub3QgYmUgZGVsZXRlZCB1bnRpbCBhZnRlciBhbGwgaXRzIGl0ZXJhdG9ycyBhcmUKZGVzdHJveWVkLiAgVGhlIHNoYXJlZCBjb250YWluZXIgaXRlcmF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgdG8KaW1wbGVtZW50IGZ1bmN0aW9ucyB0aGF0IHJldHVybiBpdGVyYXRvcnMgb3ZlciBhIHJhbmdlIG9mIG9iamVjdHMgdGhhdApvbmx5IG5lZWQgdG8gZXhpc3QgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaXRlcmF0b3JzLiAgQnkgcmV0dXJuaW5nIGEKcGFpciBvZiBzaGFyZWQgaXRlcmF0b3JzIGZyb20gYSBmdW5jdGlvbiwgdGhlIGNhbGxlZSBjYW4gcmV0dXJuIGEKaGVhcC1hbGxvY2F0ZWQgcmFuZ2Ugb2Ygb2JqZWN0cyB3aG9zZSBsaWZldGltZSBpcyBhdXRvbWF0aWNhbGx5IG1hbmFnZWQuCjxwPgpUaGUgc2hhcmVkIGNvbnRhaW5lciBpdGVyYXRvciBhdWdtZW50cyBhbiBpdGVyYXRvciBvdmVyIGEgc2hhcmVkCmNvbnRhaW5lci4gIEl0IG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgc2hhcmVkIApjb250YWluZXIuIElmIG9ubHkgc2hhcmVkIGNvbnRhaW5lciBpdGVyYXRvcnMgaG9sZCByZWZlcmVuY2VzIHRvCnRoZSBjb250YWluZXIsIHRoZSBjb250YWluZXIncyBsaWZldGltZSB3aWxsIGVuZCB3aGVuIHRoZSBsYXN0IHNoYXJlZApjb250YWluZXIgaXRlcmF0b3Igb3ZlciBpdCBpcyBkZXN0cm95ZWQuICBJbiBhbnkgY2FzZSwgdGhlIHNoYXJlZApjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBwZXJzaXN0IGJleW9uZCB0aGUgbGlmZXRpbWUgb2YgYWxsCnRoZSBpdGVyYXRvcnMuIEluIGFsbCBvdGhlciB3YXlzLCB0aGUKc2hhcmVkIGNvbnRhaW5lciBpdGVyYXRvciBiZWhhdmVzIHRoZSBzYW1lIGFzIGl0cyBiYXNlIGl0ZXJhdG9yLgoKCjxoMj5TeW5vcHNpczwvaDI+Cgo8cHJlPgpuYW1lc3BhY2UgYm9vc3QgewogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQ29udGFpbmVyLmh0bWwiPkNvbnRhaW5lcjwvYT4mZ3Q7CiAgY2xhc3Mgc2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvcjsKCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9Db250YWluZXIuaHRtbCI+Q29udGFpbmVyPC9hPiZndDsKICBzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDsKICBtYWtlX3NoYXJlZF9jb250YWluZXJfaXRlcmF0b3IodHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBiYXNlLCAKICAgIGJvb3N0OjpzaGFyZWRfcHRyJmx0O0NvbnRhaW5lciZndDsgY29uc3QmYW1wOyBjb250YWluZXIpOwoKICBzdGQ6OnBhaXImbHQ7CiAgICB0eXBlbmFtZSBzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDssCiAgICB0eXBlbmFtZSBzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDsKICAmZ3Q7CiAgbWFrZV9zaGFyZWRfY29udGFpbmVyX3JhbmdlKGJvb3N0OjpzaGFyZWRfcHRyJmx0O0NvbnRhaW5lciZndDsgY29uc3QmYW1wOyBjb250YWluZXIpOwp9CjwvcHJlPgoKPGhyPgoKPGgyPjxhIG5hbWU9ImdlbmVyYXRvciI+VGhlIFNoYXJlZCBDb250YWluZXIgSXRlcmF0b3IgVHlwZTwvYT48L2gyPgoKPHByZT4KdGVtcGxhdGUgJmx0O3R5cGVuYW1lIENvbnRhaW5lciZndDsgY2xhc3Mgc2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvcjsKPC9wcmU+CgpUaGUgY2xhc3MgdGVtcGxhdGUgPHR0PnNoYXJlZF9jb250YWluZXJfaXRlcmF0b3I8L3R0PiAKaXMgdGhlIHNoYXJlZCBjb250YWluZXIgaXRlcmF0b3IgdHlwZS4gIFRoZSA8dHQ+Q29udGFpbmVyPC90dD4gdGVtcGxhdGUKdHlwZSBhcmd1bWVudCBtdXN0IG1vZGVsIHRoZQo8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQ29udGFpbmVyLmh0bWwiPkNvbnRhaW5lcjwvYT4KY29uY2VwdC4KCjxoMz5FeGFtcGxlPC9oMz4KCjxwPgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIGNyZWF0ZSBhbiBpdGVyYXRvciB0aGF0IApyZWd1bGF0ZXMgdGhlIGxpZmV0aW1lIG9mIGEgcmVmZXJlbmNlIGNvdW50ZWQgPHR0PnN0ZDo6dmVjdG9yPC90dD4uClRob3VnaCB0aGUgb3JpZ2luYWwgc2hhcmVkIHBvaW50ZXIgPHR0PmludHM8L3R0PiBjZWFzZXMgdG8gZXhpc3QKYWZ0ZXIgPHR0PnNldF9yYW5nZSgpPC90dD4gcmV0dXJucywgdGhlCjx0dD5zaGFyZWRfY291bnRlcl9pdGVyYXRvcjwvdHQ+IG9iamVjdHMgbWFpbnRhaW4gcmVmZXJlbmNlcyB0byB0aGUKICAgICAgdW5kZXJseWluZyB2ZWN0b3IgYW5kIHRoZXJlYnkgZXh0ZW5kIHRoZSBjb250YWluZXIncyBsaWZldGltZS4KPHA+CjxhIGhyZWY9Ii4vc2hhcmVkX2l0ZXJhdG9yX2V4YW1wbGUxLmNwcCI+c2hhcmVkX2l0ZXJhdG9yX2V4YW1wbGUxLmNwcDwvYT46CjxQUkU+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAic2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvci5ocHAiPC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgImJvb3N0L3NoYXJlZF9wdHIuaHBwIjwvZm9udD4KPGZvbnQgY29sb3I9IiMwMDgwNDAiPiNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7PC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OzwvZm9udD4KPGZvbnQgY29sb3I9IiMwMDgwNDAiPiNpbmNsdWRlICZsdDt2ZWN0b3ImZ3Q7PC9mb250PgoKPEI+dHlwZWRlZjwvQj4gYm9vc3Q6OnNoYXJlZF9jb250YWluZXJfaXRlcmF0b3ImbHQ7IHN0ZDo6dmVjdG9yJmx0OzxCPmludDwvQj4mZ3Q7ICZndDsgaXRlcmF0b3I7CgoKPEI+dm9pZDwvQj4gc2V0X3JhbmdlKGl0ZXJhdG9yJiBpLCBpdGVyYXRvciYgZW5kKSAgewoKICBib29zdDo6c2hhcmVkX3B0ciZsdDsgc3RkOjp2ZWN0b3ImbHQ7PEI+aW50PC9CPiZndDsgJmd0OyBpbnRzKDxCPm5ldzwvQj4gc3RkOjp2ZWN0b3ImbHQ7PEI+aW50PC9CPiZndDsoKSk7CiAgCiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4wPC9mb250Pik7CiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4xPC9mb250Pik7CiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4yPC9mb250Pik7CiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4zPC9mb250Pik7CiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj40PC9mb250Pik7CiAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj41PC9mb250Pik7CiAgCiAgaSA9IGl0ZXJhdG9yKGludHMtJmd0O2JlZ2luKCksaW50cyk7CiAgZW5kID0gaXRlcmF0b3IoaW50cy0mZ3Q7ZW5kKCksaW50cyk7Cn0KCgo8Qj5pbnQ8L0I+IG1haW4oKSB7CgogIGl0ZXJhdG9yIGksZW5kOwoKICBzZXRfcmFuZ2UoaSxlbmQpOwoKICBzdGQ6OmNvcHkoaSxlbmQsc3RkOjpvc3RyZWFtX2l0ZXJhdG9yJmx0OzxCPmludDwvQj4mZ3Q7KHN0ZDo6Y291dCw8Zm9udCBjb2xvcj0iIzAwMDBGRiI+IiwiPC9mb250PikpOwogIHN0ZDo6Y291dC5wdXQoPGZvbnQgY29sb3I9IiMwMDAwRkYiPidcbic8L2ZvbnQ+KTsKCiAgPEI+cmV0dXJuPC9CPiA8Zm9udCBjb2xvcj0iIzAwMDBBMCI+MDwvZm9udD47Cn0KPC9QUkU+CgpUaGUgb3V0cHV0IGZyb20gdGhpcyBwYXJ0IGlzOgo8cHJlPgowLDEsMiwzLDQsNSwKPC9wcmU+Cgo8aDM+VGVtcGxhdGUgUGFyYW1ldGVyczwvaDM+Cgo8VGFibGUgYm9yZGVyPgo8VFI+CjxUSD5QYXJhbWV0ZXI8L1RIPjxUSD5EZXNjcmlwdGlvbjwvVEg+CjwvVFI+Cgo8VFI+CjxURD48YQpocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQ29udGFpbmVyLmh0bWwiPjx0dD5Db250YWluZXI8L3R0PjwvYT48L1REPgo8VEQ+VGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHdlIHdpc2ggdG8gaXRlcmF0ZSBvdmVyLiBJdCBtdXN0IGJlIAphIG1vZGVsIG9mIHRoZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0NvbnRhaW5lci5odG1sIj48dHQ+Q29udGFpbmVyPC90dD48L2E+CmNvbmNlcHQuCjwvVEQ+CjwvVFI+CjwvVGFibGU+Cgo8aDM+TW9kZWwgb2Y8L2gzPgoKVGhlIDx0dD5zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yPENvbnRhaW5lcj48L3R0PiB0eXBlIG1vZGVscyB0aGUKc2FtZSBpdGVyYXRvciBjb25jZXB0IGFzIHRoZSBiYXNlIGl0ZXJhdG9yCiAgICAoPHR0PkNvbnRhaW5lcjo6aXRlcmF0b3I8L3R0PikuCgo8aDM+TWVtYmVyczwvaDM+CgpUaGUgc2hhcmVkIGNvbnRhaW5lciBpdGVyYXRvciB0eXBlIGltcGxlbWVudHMgdGhlIG1lbWJlciBmdW5jdGlvbnMgYW5kCm9wZXJhdG9ycyByZXF1aXJlZCBvZiB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbSBBY2Nlc3MgSXRlcmF0b3I8L2E+CmNvbmNlcHQsIHRob3VnaCBvbmx5IG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGJhc2UgaXRlcmF0b3Igd2lsbCBiZSB2YWxpZC4KSW4gYWRkaXRpb24gaXQgaGFzIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0b3I6Cgo8cHJlPgpzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yKENvbnRhaW5lcjo6aXRlcmF0b3IgY29uc3QmYW1wOyBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6c2hhcmVkX3B0ciZsdDtDb250YWluZXImZ3Q7IGNvbnN0JmFtcDsgY29udGFpbmVyKQo8L3ByZT4KCjxwPgo8aHI+CjxwPgoKCjxoMj48YSBuYW1lPSJtYWtlX2l0ZXJhdG9yIj5UaGUgU2hhcmVkIENvbnRhaW5lciBJdGVyYXRvciBPYmplY3QgR2VuZXJhdG9yPC9hPjwvaDI+Cgo8cHJlPgp0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgQ29udGFpbmVyJmd0OwpzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDsKbWFrZV9zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yKENvbnRhaW5lcjo6aXRlcmF0b3IgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpzaGFyZWRfcHRyJmx0O0NvbnRhaW5lciZndDsgY29uc3QmYW1wOyBjb250YWluZXIpCjwvcHJlPgoKVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSB0byBkaXJlY3RseSBjb25zdHJ1Y3RpbmcgYQpzaGFyZWQgY29udGFpbmVyIGl0ZXJhdG9yLiAgVXNpbmcgdGhlIG9iamVjdCBnZW5lcmF0b3IsIGEgc2hhcmVkCmNvbnRhaW5lciBpdGVyYXRvciBjYW4gYmUgY3JlYXRlZCBhbmQgcGFzc2VkIHRvIGEgZnVuY3Rpb24gd2l0aG91dApleHBsaWNpdGx5IHNwZWNpZnlpbmcgaXRzIHR5cGUuCgo8aDM+RXhhbXBsZTwvaDM+CgpUaGlzIGV4YW1wbGUsIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzLCB1c2VzIAo8dHQ+bWFrZV9zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yKCk8L3R0PiB0byBjcmVhdGUgdGhlIGl0ZXJhdG9ycy4KCjxwPgo8YSBocmVmPSIuL3NoYXJlZF9pdGVyYXRvcl9leGFtcGxlMi5jcHAiPnNoYXJlZF9pdGVyYXRvcl9leGFtcGxlMi5jcHA8L2E+OgoKPFBSRT4KPGZvbnQgY29sb3I9IiMwMDgwNDAiPiNpbmNsdWRlICJzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yLmhwcCI8L2ZvbnQ+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAiYm9vc3Qvc2hhcmVkX3B0ci5ocHAiPC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgJmx0O2FsZ29yaXRobSZndDs8L2ZvbnQ+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7PC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OzwvZm9udD4KPGZvbnQgY29sb3I9IiMwMDgwNDAiPiNpbmNsdWRlICZsdDt2ZWN0b3ImZ3Q7PC9mb250PgoKCjxCPnRlbXBsYXRlPC9CPiAmbHQ7PEI+dHlwZW5hbWU8L0I+IEl0ZXJhdG9yJmd0Owo8Qj52b2lkPC9CPiBwcmludF9yYW5nZV9ubCAoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkgewogIDxCPnR5cGVkZWY8L0I+IDxCPnR5cGVuYW1lPC9CPiBzdGQ6Oml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgdmFsOwogIHN0ZDo6Y29weShiZWdpbixlbmQsc3RkOjpvc3RyZWFtX2l0ZXJhdG9yJmx0O3ZhbCZndDsoc3RkOjpjb3V0LDxmb250IGNvbG9yPSIjMDAwMEZGIj4iLCI8L2ZvbnQ+KSk7CiAgc3RkOjpjb3V0LnB1dCg8Zm9udCBjb2xvcj0iIzAwMDBGRiI+J1xuJzwvZm9udD4pOwp9CgoKPEI+aW50PC9CPiBtYWluKCkgewoKICA8Qj50eXBlZGVmPC9CPiBib29zdDo6c2hhcmVkX3B0ciZsdDsgc3RkOjp2ZWN0b3ImbHQ7PEI+aW50PC9CPiZndDsgJmd0OyBpbnRzX3Q7CiAgewogICAgaW50c190IGludHMoPEI+bmV3PC9CPiBzdGQ6OnZlY3RvciZsdDs8Qj5pbnQ8L0I+Jmd0OygpKTsKCiAgICBpbnRzLSZndDtwdXNoX2JhY2soPGZvbnQgY29sb3I9IiMwMDAwQTAiPjA8L2ZvbnQ+KTsKICAgIGludHMtJmd0O3B1c2hfYmFjayg8Zm9udCBjb2xvcj0iIzAwMDBBMCI+MTwvZm9udD4pOwogICAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4yPC9mb250Pik7CiAgICBpbnRzLSZndDtwdXNoX2JhY2soPGZvbnQgY29sb3I9IiMwMDAwQTAiPjM8L2ZvbnQ+KTsKICAgIGludHMtJmd0O3B1c2hfYmFjayg8Zm9udCBjb2xvcj0iIzAwMDBBMCI+NDwvZm9udD4pOwogICAgaW50cy0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj41PC9mb250Pik7CgogICAgcHJpbnRfcmFuZ2VfbmwoYm9vc3Q6Om1ha2Vfc2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvcihpbnRzLSZndDtiZWdpbigpLGludHMpLAoJCSAgIGJvb3N0OjptYWtlX3NoYXJlZF9jb250YWluZXJfaXRlcmF0b3IoaW50cy0mZ3Q7ZW5kKCksaW50cykpOwogIH0KICAKCgogIDxCPnJldHVybjwvQj4gPGZvbnQgY29sb3I9IiMwMDAwQTAiPjA8L2ZvbnQ+Owp9CjwvUFJFPgoKT2JzZXJ2ZSB0aGF0IHRoZSA8dHQ+c2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvcjwvdHQ+IHR5cGUgaXMgbmV2ZXIKZXhwbGljaXRseSBuYW1lZC4gVGhlIG91dHB1dCBmcm9tIHRoaXMgZXhhbXBsZSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMuCgo8aDI+PGEgbmFtZT0ibWFrZV9yYW5nZSI+VGhlIFNoYXJlZCBDb250YWluZXIgSXRlcmF0b3IgUmFuZ2UgR2VuZXJhdG9yPC9hPjwvaDI+Cgo8cHJlPgp0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgQ29udGFpbmVyJmd0OwpzdGQ6OnBhaXImbHQKICBzaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDssCiAgc2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvciZsdDtDb250YWluZXImZ3Q7CiZndDsKbWFrZV9zaGFyZWRfY29udGFpbmVyX3JhbmdlKGJvb3N0OjpzaGFyZWRfcHRyJmx0O0NvbnRhaW5lciZndDsgY29uc3QmYW1wOyBjb250YWluZXIpOwo8L3ByZT4KCkNsYXNzIDx0dD5zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yPC90dD4gaXMgbWVhbnQgcHJpbWFyaWx5IHRvIHJldHVybiwKdXNpbmcgaXRlcmF0b3JzLCBhIHJhbmdlIG9mIHZhbHVlcyB0aGF0IHdlIGNhbiBndWFyYW50ZWUgd2lsbCBiZSBhbGl2ZSBhcyAKbG9uZyBhcyB0aGUgaXRlcmF0b3JzIGFyZS4gVGhpcyBpcyBhIGNvbnZlbmllbmNlCmZ1bmN0aW9uIHRvIGRvIGp1c3QgdGhhdC4gSXQgaXMgZXF1aXZhbGVudCB0bwoKPHByZT4Kc3RkOjptYWtlX3BhaXIobWFrZV9zaGFyZWRfY29udGFpbmVyX2l0ZXJhdG9yKGNvbnRhaW5lci0mZ3Q7YmVnaW4oKSxjb250YWluZXIpLAogICAgICAgICAgICAgICBtYWtlX3NoYXJlZF9jb250YWluZXJfaXRlcmF0b3IoY29udGFpbmVyLSZndDtlbmQoKSxjb250YWluZXIpKTsKPC9wcmU+Cgo8aDM+RXhhbXBsZTwvaDM+CgpJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGEgcmFuZ2Ugb2YgdmFsdWVzIGlzIHJldHVybmVkIGFzIGEgcGFpciBvZgo8dHQ+c2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvcjwvdHQ+IG9iamVjdHMuICAKCgo8cD4KPGEgaHJlZj0iLi9zaGFyZWRfaXRlcmF0b3JfZXhhbXBsZTMuY3BwIj5zaGFyZWRfaXRlcmF0b3JfZXhhbXBsZTMuY3BwPC9hPjoKCjxQUkU+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAic2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvci5ocHAiPC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgImJvb3N0L3NoYXJlZF9wdHIuaHBwIjwvZm9udD4KPGZvbnQgY29sb3I9IiMwMDgwNDAiPiNpbmNsdWRlICJib29zdC90dXBsZS90dXBsZS5ocHAiIC8vIGZvciBib29zdDo6dGllPC9mb250Pgo8Zm9udCBjb2xvcj0iIzAwODA0MCI+I2luY2x1ZGUgJmx0O2FsZ29yaXRobSZndDsgICAgICAgICAgICAgIC8vIGZvciBzdGQ6OmNvcHk8L2ZvbnQ+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7ICAgICAgICAgICAgICA8L2ZvbnQ+Cjxmb250IGNvbG9yPSIjMDA4MDQwIj4jaW5jbHVkZSAmbHQ7dmVjdG9yJmd0OzwvZm9udD4KCgo8Qj50eXBlZGVmPC9CPiBib29zdDo6c2hhcmVkX2NvbnRhaW5lcl9pdGVyYXRvciZsdDsgc3RkOjp2ZWN0b3ImbHQ7PEI+aW50PC9CPiZndDsgJmd0OyBpdGVyYXRvcjsgCgpzdGQ6OnBhaXImbHQ7aXRlcmF0b3IsaXRlcmF0b3ImZ3Q7CnJldHVybl9yYW5nZSgpIHsKICBib29zdDo6c2hhcmVkX3B0ciZsdDsgc3RkOjp2ZWN0b3ImbHQ7PEI+aW50PC9CPiZndDsgJmd0OyByYW5nZSg8Qj5uZXc8L0I+IHN0ZDo6dmVjdG9yJmx0OzxCPmludDwvQj4mZ3Q7KCkpOwogIHJhbmdlLSZndDtwdXNoX2JhY2soPGZvbnQgY29sb3I9IiMwMDAwQTAiPjA8L2ZvbnQ+KTsKICByYW5nZS0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj4xPC9mb250Pik7CiAgcmFuZ2UtJmd0O3B1c2hfYmFjayg8Zm9udCBjb2xvcj0iIzAwMDBBMCI+MjwvZm9udD4pOwogIHJhbmdlLSZndDtwdXNoX2JhY2soPGZvbnQgY29sb3I9IiMwMDAwQTAiPjM8L2ZvbnQ+KTsKICByYW5nZS0mZ3Q7cHVzaF9iYWNrKDxmb250IGNvbG9yPSIjMDAwMEEwIj40PC9mb250Pik7CiAgcmFuZ2UtJmd0O3B1c2hfYmFjayg8Zm9udCBjb2xvcj0iIzAwMDBBMCI+NTwvZm9udD4pOwogIDxCPnJldHVybjwvQj4gYm9vc3Q6Om1ha2Vfc2hhcmVkX2NvbnRhaW5lcl9yYW5nZShyYW5nZSk7Cn0KCgo8Qj5pbnQ8L0I+IG1haW4oKSB7CgoKICBpdGVyYXRvciBpLGVuZDsKICAKICBib29zdDo6dGllKGksZW5kKSA9IHJldHVybl9yYW5nZSgpOwoKICBzdGQ6OmNvcHkoaSxlbmQsc3RkOjpvc3RyZWFtX2l0ZXJhdG9yJmx0OzxCPmludDwvQj4mZ3Q7KHN0ZDo6Y291dCw8Zm9udCBjb2xvcj0iIzAwMDBGRiI+IiwiPC9mb250PikpOwogIHN0ZDo6Y291dC5wdXQoPGZvbnQgY29sb3I9IiMwMDAwRkYiPidcbic8L2ZvbnQ+KTsKCiAgPEI+cmV0dXJuPC9CPiA8Zm9udCBjb2xvcj0iIzAwMDBBMCI+MDwvZm9udD47Cn0KPC9QUkU+CgpUaG91Z2ggdGhlIDx0dD5yYW5nZTwvdHQ+IG9iamVjdCBvbmx5IGxpdmVzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCjx0dD5yZXR1cm5fcmFuZ2U8L3R0PiBjYWxsLCB0aGUgcmVmZXJlbmNlIGNvdW50ZWQKPHR0PnN0ZDo6dmVjdG9yPC90dD4gd2lsbCBsaXZlIHVudGlsIDx0dD5pPC90dD4gYW5kIDx0dD5lbmQ8L3R0PgphcmUgYm90aCBkZXN0cm95ZWQuICBUaGUgb3V0cHV0IGZyb20gdGhpcyBleGFtcGxlIGlzIHRoZSBzYW1lIGFzCnRoZSBwcmV2aW91cyB0d28uCgoKPGhyPgo8IS0tIGhobXRzIHN0YXJ0IC0tPgpMYXN0IG1vZGlmaWVkOiBNb24gQXVnIDExIDExOjI3OjAzIEVTVCAyMDAzCjwhLS0gaGhtdHMgZW5kIC0tPgo8cD6pIENvcHlyaWdodCAyMDAzIFRoZSBUcnVzdGVlcyBvZiBJbmRpYW5hIFVuaXZlcnNpdHkuCiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAogTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCk8L3A+Cgo8L2JvZHk+Cgo8L2h0bWw+Cg==